Git kullanarak belirli bir dosyadaki değişiklikleri görün


473

git diffDeğişiklikleri kontrol etmek için komutu kullanabileceğimi biliyorum , ama anladığım kadarıyla dizin tabanlı. Bu, geçerli dizindeki tüm dosyaların tüm değişikliklerini verdiği anlamına gelir.

Yalnızca belirli bir dosyadaki değişiklikleri nasıl kontrol edebilirim? Demek, değişmiş dosyalar file_1.rb, file_2.rb, ..., file_N.rbfakat sadece dosyadaki değişiklikleri ilgilenen ediyorum file_2.rb. Bu değişiklikleri (taahhütte bulunmadan önce) nasıl kontrol ederim?



4
Asıl sorum, tüm değişiklikleri yapmadan önce belirli bir dosya için farkın nasıl kontrol edileceğidir. Git günlüğü sanırım taahhüt edilen değişiklikler içindir.
Mellon

1
Deneyimlerimde GitKraken
Giovanni Benussi

Yanıtlar:


642

Şunun gibi bir komut kullanın:

git diff file_2.rb

Farklılıklar elde edebileceğiniz şeyler hakkında tam bilgi için git diffbelgelere bakın .

Normalde, git difftek başına tüm depodaki tüm değişiklikleri gösterir (sadece geçerli dizinde değil).


102
Bir dosyanın zaten "git add" 'e yaptığınız değişikliklerini görmek istiyorsanız, "git diff --cached"
Ana Betts

8
Bir dosyayı daha eski bir işleme karşı kontrol etmek istiyorsanız: $ git diff [commit hash] file_2.rb
Alex Angelico

2
Fark görünümünden nasıl çıkılır?
Garry

1
Veya SourceTree kullanın.
GeneCode

4
@GurpreetsinghDhanju Q düğmesine basmayı deneyin

111

Başka bir yöntem ( bu SO cevabında belirtilmiştir ) geçmişi terminalde tutacak ve size dosyanın kendisinin çok derin bir kaydını verecektir:

git log --follow -p -- file

Bu, dosyanın tüm geçmişini gösterir (yeniden adlandırmaların ötesinde ve her değişiklik için farklılıklar içeren geçmiş dahil).

Başka bir deyişle, bar adlı dosya bir zamanlar foo olarak adlandırılmışsa, git log -p bar (--follow seçeneği olmadan) yalnızca dosyanın adını yeniden adlandırıldığı noktaya kadar gösterir - foo olarak bilinen dosyanın geçmişi. Git log --follow -p çubuğu kullanıldığında, foo olarak adlandırıldığında dosyada yapılan değişiklikler de dahil olmak üzere dosyanın tüm geçmişi gösterilir.


3
Eklenen / silinen satırlara genel bir bakış için --stat ile iyi çalışır.
Tom Hale

2
Evet, bu cevap en azından daha üst sıralarda yer almalı, sadece mevcut farkın değil, tarihi de izlemeli ve tüm sağlama karmalarını izlemelisiniz. Değişikliklerde oldukça basit kullanım ancak çok güçlü
Ilhicas

87

gitk [filename]Değişiklik günlüğünü görmek için kullanabilirsiniz


2
Bu, bazen ihtiyacınız olan şey olabilir, dosyadaki taahhütlerin geçmişini gösterir.
r1k0

26

Bir dosyada neyin değiştiğini görmek için aşağıdaki komutu kullanabilirsiniz.

git blame <filename>


4
Bu, kimin hangi değişikliği yaptığını ve değişikliğin ne zaman taahhüt edildiğini söyleyen en iyi cevaptır. Belirli bir değişiklik için filtrenin için, sadece yapmak git blame <filename> | grep <searchfor>nerede <searchfor>kısa bir değerdir. Örneğin, değiştirilen kim olduğunu öğrenmek için fooiçin barin dist/index.phpşunları kullanırsınızgit blame dist/index.php | grep bar
Kraang Prime

15

Sen yürütebilirsin

git status -s

Bu, değiştirilmiş dosyaların adını gösterir ve ardından ilgili dosya yolunu kopyalayarak git diff

git diff <filepath + filename>

8

yalnızca belirli dosya değişikliklerinin ayrıntılarını listelemek,

git log --follow file_1.rb

aynı dosya için çeşitli taahhütler arasındaki farkı listelemek,

git log -p file_1.rb

sadece taahhüt ve mesajını listelemek,

git log --follow --oneline file_1.rb

5

ayrıca deneyebilirsin

git show <filename>

Taahhütler için git show , günlük iletisini ve metinsel farkı gösterir (dosyanız ve dosyanın taahhütlü sürümü arasında).

Daha fazla bilgi için git show Documentation'a bakabilirsiniz .



0

@Greg Hewgill ile tamamen aynı fikirde

Yolunuzda boşluklar varsa, kullanabilirsiniz, kesme işareti 'veya ``

git diff 'Projem / Klasörüm / Alt Klasörüm / file_2.rb'

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.