Apakah ada perintah di Git untuk melihat (baik dibuang ke stdout, atau di $PAGERatau $EDITOR) versi tertentu dari file tertentu?
git checkout <sha1-of-the-commit-you-need>, setelahnya,git checkout HEAD
Apakah ada perintah di Git untuk melihat (baik dibuang ke stdout, atau di $PAGERatau $EDITOR) versi tertentu dari file tertentu?
git checkout <sha1-of-the-commit-you-need>, setelahnya,git checkout HEAD
Jawaban:
Anda dapat menggunakan git showlintasan dari akar repositori ( ./atau ../untuk lintasan relatif):
$ git show REVISION:path/to/file
Ganti REVISIONdengan revisi Anda yang sebenarnya (bisa berupa Git commit SHA, nama tag, nama cabang, nama komit relatif, atau cara lain untuk mengidentifikasi komit di Git)
Misalnya, untuk melihat versi file <repository-root>/src/main.cdari 4 komit yang lalu, gunakan:
$ git show HEAD~4:src/main.c
Git untuk Windows memerlukan garis miring maju bahkan di jalur relatif ke direktori saat ini. Untuk informasi lebih lanjut, lihat halaman manual untuk git-show.
Melakukan ini berdasarkan tanggal terlihat seperti ini:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Catatan itu HEAD@{2013-02-25}berarti "di mana HEAD berada pada 2013-02-25" di repositori ini (menggunakan reflog ), bukan "komit terakhir sebelum 2013-02-25 di cabang ini dalam sejarah".
mastersebagai ganti HEAD@{2013-02-25}, jika Anda berada di cabang
git log --since='2016-04-28 23:59:59 +0100'?
Jika Anda menyukai GUI, Anda dapat menggunakan gitk:
mulai gitk dengan:
gitk /path/to/file
Pilih revisi di bagian atas layar, mis. Dengan deskripsi atau tanggal. Secara default, bagian bawah layar menunjukkan perbedaan untuk revisi itu, (sesuai dengan tombol radio "tambalan").
Untuk melihat file untuk revisi yang dipilih:
gitk REVISION /path/to/file. Ini bisa berguna ketika Anda ingin memeriksa versi tertentu misalnya.
Anda juga dapat menentukan commit hash(sering juga disebut commit ID) dengan git showperintah .
git show <commitHash>:/path/to/file
git log /path/to/filecommit hashseperti commit 06c98...(06c98 ... menjadi hash komit)commit hashgit show <commitHash>:/path/to/filemenggunakan commit hashlangkah 3 & path/to/filelangkah 1.Catatan: menambahkan ./ketika menentukan jalur relatif tampaknya penting, yaitu git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html.
git show <SHA1> --name-onlyuntuk mendapatkannya.
Selain jawaban Jim Hunziker ,
Anda dapat mengekspor file dari revisi sebagai,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Semoga ini membantu :)
Untuk dengan cepat melihat perbedaan dengan revisi file yang lebih lama:
git show -1 filename.txt> untuk membandingkan dengan revisi file terakhir
git show -2 filename.txt> untuk membandingkan dengan revisi terakhir ke-2
git show -3 fielname.txt> untuk membandingkan dengan revisi terakhir 3 terakhir
git log -pakan menunjukkan kepada Anda tidak hanya log komit tetapi juga diff dari setiap komit (kecuali gabungan komit). Kemudian Anda dapat menekan /, masukkan nama file dan tekan enter. Tekan natau puntuk pergi ke kejadian berikutnya / sebelumnya. Dengan cara ini Anda tidak hanya akan melihat perubahan dalam file tetapi juga informasi komit.
git log -pmjuga akan menampilkan komit gabungan.
git log -p -- filename.txtuntuk membatasi riwayat hanya file yang diinginkan.
Anda dapat menggunakan skrip seperti ini untuk membuang semua versi file ke file yang terpisah:
misalnya
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Dapatkan skrip di sini sebagai jawaban untuk pertanyaan serupa lainnya
git_root, git_log_shortdan git_log_message_for_commithilang.
CARA 1: (Saya lebih suka cara ini)
git refloggit diff-tree --no-commit-id --name-only -r <commitHash>contoh:
git diff-tree --no-commit-id --name-only -r d2f9ba4// "d2f9ba4" adalah commit dari "1."
git show <commitHash>:/path/to/file
contoh:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift// "Src / ..." adalah path file dari "2."
CARA 2:
git refloggit reset --hard %commit ID%git reset --hard c14809fa
Membantu mengambil beberapa file dari revisi yang diberikan
Saat mencoba menyelesaikan konflik gabungan, pembantu ini sangat berguna:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Pemakaian:
git-show-save other-branch file1.c path/to/file2.cpp
Hasil: berikut ini berisi versi alternatif dari file:
file1.old.c
path/to/file2.old.cpp
Dengan cara ini, Anda menyimpan ekstensi file sehingga editor Anda tidak akan mengeluh, dan dapat dengan mudah menemukan file lama tepat di sebelah yang lebih baru.