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!)

d -_- b
quelle
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).

JaredMcAteer
quelle
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.

rzrgenesys187
quelle
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
Pau Fracés
quelle
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.

mvp
quelle
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
0

Wenn Sie zwei lokale Dateien im selben Verzeichnis unterscheiden möchten, verwenden Sie einfach diff.

diff fileA.php fileB.php
Matt Lacey
quelle
Dies beantwortet nicht die ursprüngliche Frage
DylanYoung
-4

Verwenden Sie einfach reguläres Diff.

diff -Nua fileA.php fileB.php
Peter van der Does
quelle
8
-1, weil "Sie können nicht" falsch ist (siehe: stackoverflow.com/a/13965200/968531 )
NobodysNightmare