Bagaimana cara memeriksa versi tertentu dari satu file di Git?

88

Bagaimana cara memeriksa versi tertentu dari satu file di git?

Saya menemukan email ini di milis , yang mengatakan:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Tapi saya tidak mengerti bagaimana cara mengetahui 'HEAD ~ 43', jika saya melakukan a git log aFile, bagaimana saya bisa mengetahui 'HEAD ~ 43' mana yang harus saya gunakan?

Dan mengapa saya harus menjalankan git resetfile itu? Apa fungsinya?

n179911
sumber
"git reset <commit> <file>" memiliki fungsi yang sama persis dengan "git checkout <commit> <file>".
Jakub Narębski
2
Jika pertanyaan Anda tentang sintaks HEAD ~ 43 (didokumentasikan dalam git-rev-parse), tanyakan tentang masalah ini, bukan tentang masalah yang tidak terkait yang Anda tahu jawabannya. "Apa arti HEAD ~ 45, dan bagaimana menemukan versi file tertentu"
Jakub Narębski
menurut lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… dan lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" tidak melakukan hal yang sama persis dengan "git checkout <commit> <file>": "git reset <commit> <file>" mengembalikan <file> di indeks dari <commit> tanpa menyentuh <file> di pohon kerja, tetapi "git checkout <commit> <file>" memperbarui indeks untuk <file> dari <commit> dan kemudian memperbarui <file> di pohon kerja.
yoda
2
Jika salah satu jawaban di bawah menjawab pertanyaan Anda, seperti cara kerja Stack Overflow, Anda akan "menerima" jawabannya dengan mengklik tanda centang di sebelahnya; detailnya di sini . Tetapi hanya jika pertanyaan Anda terjawab; jika tidak, pertimbangkan untuk menambahkan lebih banyak detail pada pertanyaan dan / atau komentar pada jawaban yang mengatakan apa yang belum jelas (belum).
TJ Crowder

Jawaban:

106

Anda tahu apa komit (yaitu: revisi spesifik) file itu? Kemudian lakukan:

git checkout <commit> <file>

Perintah lainnya:

git checkout HEAD~N <file>

Apakah untuk ketika Anda ingin mendapatkan versi file dari rentang belakang (yang saya lakukan untuk nostalgia).

Kode Palsu Monyet Rashid
sumber
19

HEAD~43hanya pohon, jadi Anda dapat menggunakan hash atau tag. Anda harus memisahkan pohon dari nama file dengan --, jika tidak maka akan diperlakukan sebagai nama file. Sebagai contoh.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename
bukit pasir
sumber
2

HEAD~43mengacu pada komit (versi) file. Daripada itu, Anda dapat menggunakan hash komit yang Anda dapatkan dari melakukan git logpada file. Jika Anda hanya menginginkan file tersebut, Anda tidak perlu menjalankannya git reset; itu hanya diperlukan jika Anda ingin meneruskan file ke HEAD saat ini.

Jim Puls
sumber