git diff aynı dalda iki dosya, aynı commit


98

bu soru varsa üzgünüm, şaşırtıcı bir şekilde bulamadım: /

git diffAynı dal ve aynı commit içinde iki dosya arasında nasıl bir işlem yapabilirim ?

yani git diff fileA.php fileB.php

(ideal olarak, git... veya BeyondCompare programının yaptıklarına benzer şekilde okunması kolay renk kodlamasıyla !)


Not: Git: Farklı işlemlerde iki farklı dosya nasıl ayrılır? bu sorudan biraz daha geneldir, ancak cevap aslında buna verilen doğru cevapla aynıdır ve tüm bu sahte cevaplara sahip değildir, bu yüzden bunu bir kopya olarak kapatmak için oy verdim.
SamB

Yanıtlar:


83

Bunun için diff fileA.php fileB.phpgit'e ihtiyacınız yok, sadece kullanın (veya yan yana karşılaştırma istiyorsanız vimdiff)


22
vimdiffkazanmak için! Teşekkürler!
d -_- b

24
Bu işe yarayabilir, ancak git diff değil. Tamamen farklı bir çıktı formatı.
daboross

11
Bu orijinal soruyu cevaplamıyor
DylanYoung

8
Katılmıyorum, OP net değildi, ancak BeyondCompare'den bahsetmesi, onun özellikle git diffokunması kolay bir fark aramadığı anlamına geliyor . Ayrıca cevabımı aradığı gibi kabul etmesi de cevabın aslında cevap verdiğini gösteriyor.
JaredMcAteer

3
cevabı yakından okuyun. komut diff fileA fileBdeğilgit diff fileA fileB
Matthew Hinea

249

Kullanmak isterseniz git diffiki keyfi dosyaları üzerinde kullanabilirsiniz git diff --no-index <file_a> <file_b>. Bunun çalışması için iki dosyanın izlenmesine gerek yoktur git.


33
İlk soruyu yanıtlarken +1 ("bunu neden yaparsın" ... nedenler olabilir)
NobodysNightmare

19
--word-diffdeğişiklikleri sadece satırla değil, kelimeyle de vurgular
user3148949

2
PowerShell kullanan bizler için bu, depodaki iki dosyadan oluşan bir fark elde etmenin çok daha kolay bir yoludur.
Jay Soyer

3
Bu mükemmel yanıt, "etkin" olarak sıralarken daha önce 2, daha az oy alan (ve daha az yararlı) yanıtların altında nasıl listeleniyor ?? Doğru olarak işaretlenen cevabı bile saymıyorum. Her neyse, teşekkürler!
j_random_hacker

@daboross GNU, 3.4+ (2016-08-08) diffutils diffsahip --colorolan kudreti yardımı (bkz unix.stackexchange.com/a/338960 ). Ancak o zaman bile, kullanılıyorsa diff-so-fancy, belirli çıktı biçimini gerektiriyor gibi görünüyor git diff. diff -u(bkz. stackoverflow.com/a/4857407/10095231 ) çalışmıyor.
kelvin

14

Karşılaştırmak istediğiniz dosyalar çalışma kopyanızdaysa, diffdiğerlerinin işaret ettiği gibi kullanabilirsiniz , ancak dosyalar bazı revizyondaysa, her dosya için bir revizyon belirleyebilirsiniz.

git diff <revision_1>:<file_1> <revision_2>:<file_2>

burada belirtildiği gibi: https://stackoverflow.com/a/3343506/1815446

Sizin durumunuzda (her iki dosya için aynı revizyonu belirterek):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

Not: Bir revizyon olabilir HEAD~2, SHA-1, bir dal adı vb
ma11hew28

Bu benim için çalıştı, sadece iki farklı dizinden dosya adlarını karşılaştırarak: her iki git diff --name-only HEAD:dir1 HEAD:dir1_backup dizinden sonra çalışır git add.
Frank Forte

1
Bu, revizyon çalışma ağacına teslim edilmezse veya çalışma ağacı dosyaları değiştirilirse ve orijinalleri farklılaştırmak istendiğinde veya çıplak git deposunda olduğu gibi hiç çalışan ağaç yoksa çalışır. Bu yüksek puanlı sorunun, "git kullanmadan git-diff benzeri bir çıktıya nasıl ulaşabilirim?"
TrentP

4

Normal gnu diff'in git diff'e benzemesi için şu parametreleri tavsiye ederim:

diff -burN file_or_dir1 file_or_dir2

( -bboşlukları yoksay, -ubirleştirilmiş fark, -rözyinelemeli, -Neksik dosyaları olduğu gibi işleme koy /dev/null).

Harika çalışıyor, ancak yine de renkleri yok ve git tarzı otomatik sayfalama neredeyse yok. Her ikisini de düzeltmek istiyorsanız (yaparım), şu şekilde kurun colordiffve kullanın:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Bu, gerçeğe çok yakın bir çıktı ve arayüz sağlar git diff.


4
-1 çünkü "yapamazsınız" yanlıştır (bkz: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

"Yapamazsınız" ifadesini kaldırın, colordiff'i yüklemek için talimatlar ekleyin ve bu, orijinal soruya iyi bir yanıt olabilir.
DylanYoung


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.