Mevcut durum ile son kaydetme arasındaki farkı görme


93

Bazen bir taahhütte bulunmak üzereyken, son işlemden bu yana neyin değiştiğini tam olarak hatırlayamıyorum. Kodun mevcut durumu ile son commit arasındaki farkı nasıl görebilirim?

Yanıtlar:


113

Henüz dizine dosya eklemediyseniz (ile git add),

git diff

Bu, çalışma ağacınız ile dizininiz arasındaki farkı gösterecektir.

Dizine dosya eklediyseniz, dizin ve son işleme (HEAD) arasındaki farkları göstermek için bunu yapmanız gerekir.

git diff --cached

Son olarak, en son commit ( HEAD) ile karşılaştırıldığında çalışma ağacında yapılan değişiklikleri görmek istiyorsanız, şunları yapabilirsiniz (Carlos'un işaret ettiği gibi)

git diff HEAD

Bu değişiklikler kombinasyonu vardır git diffve git diff --cached.


2
git diffÇalışma ağacını HEAD ile değil indeksle karşılaştırır.
Carlos Martín Nieto

@ CarlosMartínNieto Doğru söylüyorsunuz, efendim. Gönderimi bunu yansıtacak şekilde geliştirdim.
Klas Mellbourn

Onu çalıştırıyorum ama terminal bitmiyor, nasıl çıkabilirim? hiç birşey çalışmıyor.
Francisco Corrales Morales

@KlasMellbourn, git diffBir diff mesajında ​​indeksin bir durumu ve bir önceki commit mümkün mü ?
alpha_989

2
İyi anladım git diff --cached HEAD^:)
alpha_989

33

Henüz bir kesinleştirme yaptıysanız veya son işlemede mevcut duruma kıyasla neyin değiştiğini görmek istiyorsanız (temiz bir çalışma ağacınız olduğunu varsayarak) şunları kullanabilirsiniz:

git diff HEAD^

Bu, HEAD'i hemen önceki kaydetme ile karşılaştırır. Bir de yapabilirdi

git diff HEAD^^

2 işlemden önceki oyun durumuyla karşılaştırmak için. Mevcut durum ile belirli bir kesinleştirme arasındaki farkı görmek için şunları yapmanız yeterlidir:

git diff b6af6qc

b6af6qcBir commit hash örneği nerede .


3
Git'in Windows cmd sürümü için bir uyarı - düzeltme işaretinin kendisiyle düzeltme (^) karakterinden kaçınmanız gerekir. Bu nedenle, "git diff HEAD ^", "git diff HEAD ^^" olacaktır. Aynı şekilde, "HEAD ^^", "HEAD ^^ ^ ^" olarak girilecektir.
Eellor

1
Bu cevapta, "son commit" nin ne anlama geldiğinin biraz belirsiz olduğunu düşünüyorum. HEAD^taahhüt olduğunu önce en son taahhüt.
Klas Mellbourn

3

Git'ten, kısaltması olan geçerli / son yürütmeyi farklılaştırmasını istersiniz HEAD.

Böylece çalışma git diff HEADağacının mevcut durumunu mevcut commit ile karşılaştıracağız.


3

bu aynı zamanda farkı ve hangi dosyaların değiştirildiğini / değiştirildiğini de gösterir.

$ git status 

Dizin dosyası ile geçerli HEAD yürütmesi arasında farklılıklar olan yolları, çalışma ağacı ile dizin dosyası arasında farklılıklar olan yolları ve çalışma ağacında git tarafından izlenmeyen (ve gitignore tarafından yok sayılmayan yolları) görüntüler (5) ). Birincisi, git commit'i çalıştırarak yapacağınız şey; ikinci ve üçüncüsü, git commit'i çalıştırmadan önce git add çalıştırarak gerçekleştirebileceğiniz şeylerdir.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html


2

Bu benim için de geçerli:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Bu genellikle doğrusal bir tarih için işe yarar. Birleştirme taahhütleri de varsa, bu daha karmaşık hale gelebilir. Güzel ve eksiksiz bir açıklama için bu belgeye bakmanızı tavsiye ederim, özellikle ağaç çizimi örneğini işlemek için:

https://git-scm.com/docs/gitrevisions

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.