Git Diff zwei Dateien auf dem gleichen Zweig, das gleiche Commit


97

Entschuldigung, wenn diese Frage existiert, konnte ich sie überraschenderweise nicht finden: /

Wie kann ich eine git diffzwischen zwei Dateien innerhalb desselben Zweigs und desselben Commits ausführen ?

dh git diff fileA.php fileB.php

(Idealerweise mit der einfach zu lesenden Farbcodierung, die gitbietet .... oder ähnlich wie das Programm BeyondCompare!)


Hinweis: Git: Wie werden zwei verschiedene Dateien in verschiedenen Commits unterschieden? ist etwas allgemeiner als diese Frage, aber die Antwort ist im Wesentlichen die gleiche wie die richtige Antwort auf diese Frage, und es gibt nicht alle diese falschen Antworten, also habe ich dafür gestimmt, dies als Betrug zu schließen.
SamB

Antworten:


84

Sie brauchen dafür kein Git, verwenden Sie einfach diff fileA.php fileB.php(oder vimdiff, wenn Sie einen Vergleich nebeneinander wünschen).


22
vimdifffür den Sieg! Vielen Dank!
d -_- b

24
Das mag funktionieren, ist aber kein Git-Diff. Es ist ein völlig anderes Ausgabeformat.
Daboross

11
Dies beantwortet nicht die ursprüngliche Frage
DylanYoung

8
Ich bin anderer Meinung, das OP war nicht klar, aber die Tatsache, dass er BeyondCompare erwähnt, impliziert, dass er nicht speziell nach einem, git diffsondern einfach nach einem einfach zu lesenden Diff sucht . Auch die Tatsache, dass er meine Antwort als das akzeptiert hat, wonach er gesucht hat, zeigt auch, dass sie sie tatsächlich beantwortet.
JaredMcAteer

3
Lesen Sie die Antwort genau durch. der Befehl ist diff fileA fileBnichtgit diff fileA fileB
Matthew Hinea

247

Wenn Sie git diffzwei beliebige Dateien verwenden möchten, können Sie diese verwenden git diff --no-index <file_a> <file_b>. Die beiden Dateien müssen nicht nachverfolgt werden, gitdamit dies funktioniert.


32
+1 als Antwort auf die ursprüngliche Frage (unabhängig davon, "warum sollten Sie das tun" ... es kann Gründe geben)
NobodysNightmare

19
--word-diffhebt Änderungen nach Wort hervor, nicht nur nach Zeile
user3148949

2
Für diejenigen von uns, die PowerShell verwenden, ist dies eine weitaus einfachere Möglichkeit, zwei Dateien in einem Repo zu unterscheiden.
Jay Soyer

2
Wie ist diese ausgezeichnete Antwort unter 2 früheren, weniger stimmberechtigten (und weniger nützlichen) Antworten aufgeführt, wenn nach "aktiv" sortiert wird? Ich zähle nicht einmal die als richtig markierte Antwort. Trotzdem danke!
j_random_hacker

@daboross In GNU diffutils 3.4+ (2016-08-08) diffhat --color, was helfen könnte (siehe unix.stackexchange.com/a/338960 ). Aber selbst dann, wenn es verwendet wird diff-so-fancy, scheint es das spezifische Ausgabeformat von zu erfordern git diff. diff -u(siehe stackoverflow.com/a/4857407/10095231 ) funktioniert nicht.
Kelvin

14

Wenn sich die zu vergleichenden Dateien in Ihrer Arbeitskopie befinden, können Sie sie einfach diffwie von den anderen angegeben verwenden. Wenn sich die Dateien jedoch in einer Revision befinden, können Sie für jede Datei eine Revision angeben

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

wie hier angegeben: https://stackoverflow.com/a/3343506/1815446

In Ihrem Fall (Angabe derselben Revision für beide Dateien):

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

Hinweis: Eine Revision kann HEAD~2ein SHA-1, ein
Filialname

Dies funktionierte für mich, indem ich nur Dateinamen aus zwei verschiedenen Verzeichnissen verglich: git diff --name-only HEAD:dir1 HEAD:dir1_backup funktioniert nach einem git addder beiden Verzeichnisse.
Frank Forte

1
Dies funktioniert, wenn die Revision nicht im Arbeitsbaum ausgecheckt ist oder die Arbeitsbaumdateien geändert wurden und man die Originale unterscheiden möchte oder wenn es überhaupt keinen Arbeitsbaum gibt, wie in einem Bare-Git-Repo. Es ist bedauerlich, dass diese hoch bewertete Frage hoch bewertete Antworten enthält, die eine immer noch nützliche, aber ganz andere Frage beantworten: "Wie kann ich eine git-diff-ähnliche Ausgabe erhalten, ohne git zu verwenden?"
TrentP

4

Um reguläres Gnu Diff eher wie Git Diff aussehen zu lassen, würde ich folgende Parameter empfehlen:

diff -burN file_or_dir1 file_or_dir2

(wo -bLeerzeichen ignorieren, -ueinheitliches Diff, -rrekursiv, -Nfehlende Dateien als behandeln /dev/null).

Es funktioniert großartig, hat aber immer noch keine Farben und Auto-Paging im Git-Stil fehlt praktisch. Wenn Sie beide Probleme beheben möchten (ich tue es), installieren colordiffund verwenden Sie es wie folgt:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Dies ergibt eine Ausgabe und eine Schnittstelle, die der tatsächlichen sehr nahe kommt git diff.


4
-1, weil "Sie können nicht" falsch ist (siehe: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

Entfernen Sie das "Sie können nicht", fügen Sie Anweisungen zur Installation von colordiff hinzu, und dies könnte eine OK-Antwort auf die ursprüngliche Frage sein.
DylanYoung


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.