Taahhütten önce git farkındaki dosya nasıl görüntülenir


443

Bu sık sık başıma geliyor:

Bir veya iki gün boyunca aynı anda birkaç ilgili değişiklik üzerinde çalışıyorum ve iş yapma zamanı geldiğinde, belirli bir dosyada nelerin değiştiğini unutuyorum. (Bu sadece kişisel bir git repo, bu yüzden bir taahhüt birden fazla güncelleme ile tamam.)

Teslim edilecek yerel dosya ile bu dosya için son işlem arasındaki değişiklikleri önizlemenin bir yolu var mı?

Gibi bir şey:

git diff --changed /myfile.txt

Ve şöyle bir şey yazdırır:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

Bu şekilde, en son teslim edildikten sonra bu dosyada ne yaptığımı hızlı bir şekilde görebiliyordum.

Yanıtlar:


732

Henüz ne yapmadığınızı görmek istiyorsanız git add:

git diff myfile.txt

veya önceden eklenmiş değişiklikleri görmek istiyorsanız

git diff --cached myfile.txt

20
kontrol edin git add -p. Her değişikliği gözden geçirin, sahne alanı değişikliklerini seçerek onaylayın, fikrinizi değiştirirseniz istediğiniz zaman iptal edin ve hatta bir yığın satır içi düzenleyin. Ben asla git addonsuz.
Kyle Baker

2
dosyadan nasıl çıkabilirsiniz?
Kick Buttowski

3
@Kick Try pressq
wjandrea

ayrıca, aptal sonuçta aptal 'a /' ve 'b /' öneklerini kaldırmak istiyorsanız, ayarlayabilirsiniz git config --global diff.noprefix true.
Liang

64
git diff HEAD file

son işlemden sonra çalışma ağacınıza eklediğiniz değişiklikleri gösterecektir. Tüm değişiklikler (aşamalı veya aşamalı değil) gösterilir.


1
Çözümünüz işe yarıyor. Ama biraz kafam karıştı. HEAD son taahhüt numarasını gösterir. Bu nedenle, git add eklediğimizde, HEAD değil çalışma dizininin dizini güncellenir. Peki bu farkı nasıl gösteriyor?
Mav55

17

Yerel farklılıkları kontrol etmek için:

git diff myfile.txt

veya bir fark aracı kullanabilirsiniz (bazı değişiklikleri geri almak isterseniz):

git difftool myfile.txt

Kullanmak için git difftooldaha verimli, yüklemek ve bu tür Meld, DiffMerge veya OpenDiff gibi favori GUI aracını kullanın.

Not: .Geçerli dir değişikliklerini görmek için (dosya adı yerine) de kullanabilirsiniz .

Her satırdaki değişiklikleri kontrol etmek için şunu kullanın: git blamehangisi hangi satırın hangi taahhütte taahhüt edildiğini gösterir.


İşleme başlamadan önce gerçek dosyayı görüntülemek için ( masterşubeniz nerede ) şunu çalıştırın:

git show master:path/my_file

15

Denediniz mi -v(veya --verbose) seçeneği git commit? İleti düzenleyicideki taahhüdün farkını ekler.


İyi cevap. Bu, taahhüt editöründe bilgi sağlayabilir, daha kolay taahhüt etmemi sağlar. Changes not staged for commit:Taahhüt editörünü daha temiz hale getirebilecek bilgi alanını kapatmanın herhangi bir yolu var mı ?
Radian Jheng

15

Bir dosyayı son bilgisiyle daha bilgiçlikle karşılaştırmak istiyorsanız dikkate almanız gereken başka bir teknik:

git diff master myfile.txt

Bu tekniğin avantajı, sondan bir önceki taahhüt ile de karşılaştırabilmenizdir:

git diff master^ myfile.txt

ve ondan önceki:

git diff master^^ myfile.txt

Ayrıca ^ ^ karakterini ~ ~ master karakterini ve üssü dalında değilseniz 'üssü' yerine üssü ismini 'değiştirebilirsiniz.


14

Bence bu bir GUI gerektiren mükemmel bir kullanım vakası. - Her ne kadar komut satırında da yeterince başarılı olabileceğini tamamen anlamama rağmen.

Şahsen, her işimi git-gui'den yapıyorum. İçinde mantıklıysa, ayrı parça / çizgilerle birden fazla atomik taahhütte bulunabilirim.

Gut Gui, diffs'lerin iyi biçimlendirilmiş renkli bir arayüzde görüntülenmesini sağlar, oldukça hafiftir. Görünüşe göre bu da ödeme yapmanız gereken bir şey.


Kabul ediyorum - aynı zamanda fark mesajına bakarken taahhüt mesajını düzenlemenizi sağlar.
François

Bilmek güzel, ama CLI'ye bağlı kalmak istiyorum. Ben sahip birkaç paket kullandım, ama benim iş akışı için kesinlikle terminal / vim taşındı. Yine de teşekkürler.
Sos McBoss

Evet, GUI'ye sadık kalırsanız, git bisectgerçekten erişilebilir olmayan birçok harika özellik var .
NoBugs 15:14

2
Kabul ediyorum - Çok daha hızlı olduğu ve komut satırını kullanmanın daha mantıklı olduğu birçok seçenek var. Ancak, değişikliklerin önizlemesi bunlardan biri değildir.
VitalyB

Terminalde çalışan metin kullanıcı arayüzleri de vardır. Bir göz atmaya değer tig"Git için metin modu arayüzü".
smido

10

MacOS'ta git kök dizinine gidin ve şunu girin: git diff *


Evet, test ettim. Git yüklü mü? Herhangi bir hata mesajı var mı? Belki de bununla ilgili yeni bir soru sorulabilir.
catanore

4

Özel bir taahhüt GUI kullanmak dışında bulduğum en iyi yolu kullanmaktır git difftool -d- Bu fark aracınızı dizin karşılaştırma modunda açar, HEAD'i mevcut kirli klasörle karşılaştırır.


tam ihtiyacım olan şey. Teşekkürler
Ivan Ferrer Villa

3
git difftool -d HEAD filename.txt

Bu, terminaldeki VI yarık penceresini kullanan bir karşılaştırmayı gösterir.

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.