Taahhüt edilmemiş yerel değişiklikler ve kökeni arasında fark


141

Diyelim ki bir havuzu kopyaladım ve dosyaları değiştirmeye başladım. Yerel taahhüt edilmemiş değişiklikler varsa, aşağıdaki gibi bir fark yapabilir git diff test.txtve bana mevcut yerel KAFA ile dosyadaki değiştirilmiş, taahhüt edilmemiş değişiklikler arasındaki farkı göstereceğini biliyorum. Bu değişiklikleri taahhüt edersem, orijinal depoya göregit diff master origin/master

Ancak yerel değişiklikleri yerel olarak uygulamadan önce sunucudaki orijinal havuzla dağıtmanın bir yolu var mı? Şanssız çeşitli permütasyonları denedim git diff --cached master origin/master.


Dosyamın yerel dosyamdaki son işlenen sürümden ne kadar değiştiğini bilmek istedim. Sorumun cevabı bu soruydu. Teşekkürler!
Souvik Ghosh

Yanıtlar:


133

Uzak deponun önbelleğe alındığı göz önüne alındığında, git fetchbu taahhütlerle karşılaştırmak mümkün olmalıdır. Takip etmeyi dene:

$ git fetch origin
$ git diff origin/master

5
Ah, mükemmel. Anahtar efendiyi dışarıda bırakmaktı. Daha önce bir getirme yaptığım bir kombinasyonu denemiştim, ancak yaptığımda git diff master origin/masterhala taahhütlü versiyonla karşılaştırılıyor (geriye dönük olarak açık). Ancak kaptanı bırakmak artık yerel değişiklikleri getirilen versiyonla karşılaştırıyor.
Chaitanya

@Chaitanya İyi yardım edebilirim. Aslında Git'in biraz sinir bozucu kullandığı farklı stilleri buluyorum: bir kez yazmanız origin masterve başka bir yerde origin/master. Hala yapılacak işler var IMHO.
JJD

Bu işe yaramaz gibi görünüyor: git diff origin/masterdönüş fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.ustası olsa da kökeni var, örneğin iyi git fetch origin masterçalışıyor,
mikemaccana

42

Ben tam soru soruların bir cevap değil biliyorum ama fark bir seyir bu soruyu buldum dosyayı bir dalda ve yerel bir kaydedilmemiş dosya ve ben paylaşmak düşündüm

Sözdizimi:

git diff <commit-ish>:./ -- <path>

Örnekler:

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(Dosya adını iki kez yazmak zorunda kalmamanın bir yolu için Eric Boehs'e teşekkürler)


Genel çözümü yukarıdaki dar, spesifik çözümden daha çok seviyorum. Bunu bulduğun yeri paylaşmak ister misin?
fbicknel

Ayrıntıları commit-ishve iki nokta üst üste ayırıcı ile ilgili belgeleri bulamıyorum . Git-diff'teki dokümanlar bundan bahsetmiyor gibi görünüyor. Onu çok uzun süre kullandım, ilk nerede bulduğumu hatırlamıyorum. Muhtemelen diğer insanların diğer komutlarla ilgili örnekleri ve ben sadece denedim git-diff. Korkarım başka bir cevapcommit-ish şu anda bulabileceğim en iyisi.
Nate

3
Buna güzel bir ektir git diff master:./ -- README.md. Bu şekilde README.mdiki kez yazmak zorunda kalmazsınız ve bunu bir takma ada daha kolay ekleyebilirsiniz.
Eric Boehs

@EricBoehs teşekkürler, Bu harika bir öneri.
Nate

1
Bu sözdizimi yerine ... benim için çalışmıyor bir oluşturur kaynağı ziyade uzaktan dalı. Git sürüm 2.19.0 kullanmagit diff master: -- README.md.//dev/null
rustyDev

21

Varolan dosyalarda aşamalı olmayan (eklenmeyen) değişiklikleri görmek için

git diff

Bunun yeni dosyaları izlemediğini unutmayın. Aşamalı, taahhütlü olmayan değişiklikleri görmek için

git diff --cached


9

Dosyaları görsel olarak karşılaştırmak istiyorsanız şunları kullanabilirsiniz:

git difftool

Değiştirilen her dosya için fark uygulamanızı otomatik olarak başlatacaktır.

Not: Bir fark uygulaması ayarlamadıysanız, aşağıdaki örnekte olduğu gibi yapabilirsiniz ( Winmerge kullanıyorum ):

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

bu değişiklik hemen yürürlüğe giriyor mu?
Dilip Raghunathan

Sadece merak ediyorum, bunun sorulan soru ile nasıl bir ilişkisi var? Git difftool sadece yerel değişiklikleri usta ile karşılaştırmaz mı? Ancak, OP yerel değişiklikler ve uzak master arasında bunu istiyor.
18'de

En kolay çözüm
Chris Johnson
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.