Git'te bir dosyanın belirli bir sürümünü nasıl kontrol edebilirim?


88

Git'te bir dosyanın belirli bir sürümünü nasıl kontrol edebilirim?

Bu postayı posta listesinde buldum ve şunları söyledi:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Ama 'HEAD ~ 43'ü nasıl bulacağımı anlamıyorum, eğer a yaparsam git log aFile, hangi' HEAD ~ 43 'kullanmam gerektiğini nasıl öğrenebilirim?

Ve neden git reseto dosya için çalışmam gerekiyor ? Bu ne işe yarıyor?


"git reset <commit> <file>", "git checkout <commit> <file>" ile tamamen aynıdır.
Jakub Narębski

2
Sorunuz HEAD ~ 43 sözdizimi hakkındaysa (git-rev-ayrıştırmada belgelenmiştir), yanıtını bildiğiniz ilgisiz sorunu değil, bu sorunu sorun. "HEAD ~ 45 ne anlama geliyor ve dosyanın belirli bir sürümünü nasıl bulabilirim?"
Jakub Narębski

uygun lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/... ve lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>", "git checkout <commit> <file>" ile tam olarak aynı şeyi yapmaz: "git reset <commit> <file>" dizindeki <file> dosyasını geri döndürür çalışma ağacında <file> öğesine dokunmadan <commit> öğesinden, ancak "git checkout <commit> <file>" <commit> dosyasındaki <file> dizinini ve ardından çalışma ağacında <file> dosyasını güncelliyor.
yoda

2
Aşağıdaki cevaplar Varsa cevap soru, yığın taşması çalışma şeklini, sen yanındaki onay işaretini tıklayarak cevabını "kabul et" diye; ayrıntılar burada . Ancak yalnızca sorunuz yanıtlanırsa; değilse, soruya daha fazla ayrıntı eklemeyi ve / veya (henüz) net olmadığını söyleyen yanıtlara yorum eklemeyi düşünün.
TJ Crowder

Yanıtlar:


106

Dosyanın hangi işleme (yani belirli revizyon) ait olduğunu biliyor musunuz? O zaman yap:

git checkout <commit> <file>

Diğer komut:

git checkout HEAD~N <file>

Dosyanın bir versiyonunu bir aralıktan (nostalji için yapıyorum) almak istediğiniz zaman içindir.


19

HEAD~43sadece ağaçsıdır, bu nedenle bir karma veya etiket kullanabilirsiniz. Ağaçları dosya adından ile ayırmanız gerekir --, aksi takdirde dosya adı olarak değerlendirilir. Örneğin.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43dosyanın commit (versiyonunu) ifade eder. Bunun yerine git log, dosya üzerinde yapmaktan aldığınız commit hashini kullanabilirsiniz . Sadece dosyayı istiyorsanız, git resetüzerinde çalıştırmanıza gerek yoktur ; bu sadece dosyayı mevcut HEAD'e iletmek istiyorsanız gereklidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.