Dosyanın geçerli çalışma kopyasını başka bir dalın taahhütlü kopyayla dağıtma


158

fooAna dalda dosya bulunan bir repo var . Çubuk dalına geçtim ve bazı değişiklikler yaptım foo. Şimdi git diffbu kopya (henüz işlenmemiş) ile ana dalın kopyası arasında nasıl çalıştırabilirim ?

Yanıtlar:


151

Aşağıdakiler benim için çalışıyor:

git diff master:foo foo

Geçmişte şunlar olabilirdi:

git diff foo master:foo


9
Seninle ilgili git diffher cevabını gördüğümde, hep stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…
VonC

@VonC: teşekkürler, bunları çizmeye değer olduğunu bilmek güzel :) Bu arada, cevabımı güncellediğim garipliği anladın mı?
Mark Longair

2
--Parametreleri yol bağımsız değişkenlerinden ayırmak için a ile denediniz mi? git diff -- master:foo foo
VonC

1
1.8'de git diff -- master:foo fooişe yaramıyor - arg'e master:foo, daldaki bir dosya yerine var olmayan bir dosya adı gibi davranıyor (ve yok sayar). Son 2 argümanı değiştirmeyi deneyin - eğer işe yaradıysa, fark karşılaştırması tersine çevrilmelidir, ancak çıktı değişmez.
Kelvin

9
Benim için tam tersi - yapabilirim git diff master:foo fooama tam tersi değil. Ben de anlamıyorum. Git 1.7.9.5 / Ubuntu 12.04 ile en azından git diff -R master:foo fooistediğim farkı elde etmek için yapabilirim. Bunu msysgit 1.9.4 / Windows 7 x64 ile denediğimde elde ederim fatal: unable to read 0000000000000000000000000000000000000000. Olmadan -Rgit 1.7.9.5 ile aynı hata mesajını alıyorum, ama 1.9.4 ile alıyorum fatal: master:foo: no such path in the working tree.
JMM

100

Çalışma ağacınızı belirli bir dal adıyla karşılaştırmaya çalışıyorsunuz, bu yüzden şunu istiyorsunuz:

git diff master -- foo

Bu git-diff formundan (git-diff man sayfasına bakınız)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Bilginize, çalışma ağacınızdaki her şeyden ziyade, hazırladığınız şeyin farkını görüntülemek için --cached(aka --staged) bir seçenek de vardır :

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
Teşekkürler. Neden olduğu hakkında bir fikrim yok ama Linux'ta git 1.8.1 ile sadece bu cevap benim için çalıştı.
srking

Harika teşekürler. Diff komutuna şu anki şubemin adını eklemek istemiştim, ama bunun gerekli olmadığını görüyorum.
yoyo

Bu benim için birkaç ay önce çalıştı, ama şimdi öyle görünmüyor. Şu anda git sürüm 2.7.4 (Apple Git-66); Daha önce ne olduğumu bilmiyorum.
hBrent

@hBrent bu benim için OSX 10.11 üzerinde git 2.7.3 ile çalışıyor. Yararlıysa
Jordan Brough

Teşekkürler @JordanBrough.
hBrent

14

Ayrıca: git diff master..feature foo

Çünkü git diff foo master:foobenim için dizinler üzerinde çalışmıyor.


Ben de değil. Windows bir şey mi?
Scott Stafford

@ScottStafford Ubuntu'dayım, bu yüzden hayır, sadece Windows bir şey gibi görünmüyor.
ArtBIT

Açıkça her iki şube adını (windows) vermek sürece benim için çalışıyor git diff branch1:foo master:foo
Meep

13
git difftool tag/branch filename

Bu, bir dosyanın yerel çalışan bir kopyası ile uzak bir depodaki dosya sürümü ("köken" değil) arasında karşılaştırma yapmak için benim için çalışan tek yanıttır. Teşekkürler, Adir ve Baz
Fare

git difftoolgit-scm.com/docs/git-difftool adresine-v göre seçeneği yoktur . Bunu mu demek istediniz ? -y
ks1322

10
git diff mybranch master -- file

ayrıca çalışmalı


4
Bu yalnızca mybranch'a bağlı dosyalar için çalışır, dosyanın geçerli çalışan kopyası için geçerli değildir.
yoyo

"-" ne anlama geliyor
Pushparaj

Bu, her iki yönde karşılaştırmaya izin verir: git diff deployment master -- fileve herhangi bir 2 daldagit diff master deployment -- file beklendiği gibi çalışır .
viktorkho

0

Yerel değişiklikleri görmek için mevcut şubenize kıyasla

git diff .

Yerel değişimleri görmek için mevcut diğer şubelere kıyasla

git diff <branch-name> .

Belirli bir dosyanın değişikliklerini görmek için

git diff <branch-name> -- <file-path>

git fetchBaşlangıçta koştuğunuzdan emin olun .

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.