Git'e geçmeden önce bir dosyada nelerin değiştiğini nasıl görebilirim?


351

Bir veya iki bilet üzerinde çalışırken, uzaklaşırsam, neyin üzerinde çalıştığımdan, neyin değiştiğinden vb. Emin değilim.

Git add ve sonra git kesinleştirmeden önce belirli bir dosya için yapılan değişiklikleri görmenin bir yolu var mı?

Yanıtlar:


525

Arıyorsunuz git diff. Kesin durumunuza bağlı olarak, bunu kullanmanın üç yararlı yolu vardır:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Dizinlerde özyinelemeli olarak çalışır ve hiçbir yol belirtilmezse tüm değişiklikleri gösterir.


1
@ sveilleux2 Hayır, sadece herhangi bir argüman olmadan git diff komutunu çalıştırın. (Köşeli parantezler [filename]isteğe bağlı bir bağımsız değişkeni belirtir.) *Kabuğun tüm dosyaları listelemesine izin veriyorsanız, bir alt dizindeyseniz yalnızca bu alt dizinde (tüm repo değil) şeyler alırsınız ve ' gizli dosyalarda değişiklikleri özleyeceğim.
Cascabel

# geçerli taahhüt ve dizin arasındaki farkları göster # yani, taahhüt etmek üzeresiniz git diff --cached [dosyaadı] Bunu mu demek istediniz? için itmek ? git diff --cached [dosyaadı]
ofarooq

3
Bir dosya ekledikten sonra yapılan farklılıkları görmek için (örneğin, "git add" ifadesinden sonra), "git diff --staged [dosyaadı]" işlevini yapın
Sidtharthan

Oh, neden bu kadar karmaşık ?! Ya birkaç düzine dosyamız varsa? .. Sadece git arayüzünden şikayet etmek ... Evet, görünüşe göre, git add -ptüm dosyaları incelemek için bir alternatif.
Kirby

@Jefromi - lütfen git diff --staged [filename]daha sık ihtiyaç duyulan bir durum olduğundan ana cevabınızı eklemeyi düşünün .
Lazarus Thurston



8

Benim git add -piçin en yararlı yol (ve git geliştiriciler tarafından düşünüyorum?) Tüm etiketsiz değişiklikleri gözden geçirmek (her dosya için fark gösterir), bir taahhüt ile gitmek gerekir iyi bir dizi değişiklikler seçin, sonra hepsini sahneye koyduktan sonra kullanın git commitve bir sonraki işlem için tekrarlayın. Daha sonra her bir taahhüdü çeşitli dosyalarda olsalar bile yararlı veya anlamlı bir değişiklik kümesi yapabilirsiniz. Ayrıca, her bilet veya benzer etkinlik için yeni bir şube oluşturmayı ve aralarında geçiş yapmayı checkout(belki de git stashgeçiş yapmadan önce taahhütte bulunmak istemiyorsanız kullanma) öneririm , ancak birçok hızlı değişiklik yapıyorsanız bu bir acı olabilir. Sık sık birleşmeyi unutmayın.


Peki git add dosya adı yerine git add -p?
Timothy T.

1
git add -p, evrelemenin, sahne alabileceğiniz değişiklikleri görmenin ve bunları etkileşimli bir şekilde tek tek seçmenin birleşimidir. Git add -p ile ilgili daha fazla bilgi için Git'te dosyanın yalnızca bir bölümünü işleme bölümüne bakın .
Angelos Asonitis

5

git diff

Çalışma ağacı ile dizin veya ağaç arasındaki değişiklikleri, dizin ile ağaç arasındaki değişiklikleri, iki ağaç arasındaki değişiklikleri veya diskteki iki dosya arasındaki değişiklikleri gösterir.


Alıntı biraz fazla - varsayılan olarak ilk karşılaştırmayı gerçekleştirir: çalışma ağacı ve dizin arasında.
Cascabel

4

Unutmayın, değişiklik yapıyorsunuz , dosya değil.

Bu nedenle, git add -pdeğişikliklerimi eklemek için (veya magit eşdeğeri) kullanmam çok nadirdir .


2
git gelmez DEĞİL o karışıklık ve hataların başlıca kaynağı olduğunu mu sanki bu konuda düşünmeye çalışıyorum - değişikliklerle başa. git anlık görüntüleri ile ilgilenir.
Chris Dodd

3
git diff <path>/filename

yolu dosyaya kadar tam sistem yolu olabilir veya
projede iseniz değiştirilmiş dosya yolunu da
yol kullanımı ile değiştirilmiş dosyalar için yapıştırın :git status


2

Dosyam umurumda değil. Hepsini göster.

Zaten git adddosya listenizle çalıştığınızda:

$ git diff --cached $(git diff --cached --name-only)

'Nin daha yeni sürümlerinde gitde kullanabilirsiniz --staged.--cached .

Aynı şey dosya eklememiş ancak seçeneksiz olarak kullanılabilir --cached.

$ git diff $(git diff --name-only)

"Önbellek" seçeneği için Git komut diğer adı:

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
Ayrıntılar için teşekkürler git diff --cached - yalnızca isim aradığım komuttu ....
Doogle

1

İlgili git deponuza gidin, ardından aşağıdaki komutu çalıştırın:

git diff dosya adı

Dosya, işaretli değişikliklerle açılır, dosyayı aşağı kaydırmak için dönüş / giriş tuşuna basın.

PS dosya adı dosyanın tam yolunu içermelidir, aksi takdirde dosyanın ilgili dizinine / klasörüne giderek tam dosya yolu olmadan çalıştırabilirsiniz


0

Git dostu bir metin düzenleyici de kullanabilirsiniz. Değiştirilmiş çizgiler üzerinde renkler, eklenen çizgiler için başka bir renk, silinmiş çizgiler için başka bir renk vb. Gösterir.

Bunu yapan iyi bir metin editörü GitHub'ın Atom 1.0'ıdır .

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.