Git Diff zwischen zwei verschiedenen Dateien

108

In HEAD(dem letzten Commit) habe ich eine Datei mit dem Namen foo. In meinem aktuellen Arbeitsbaum habe ich ihn umbenannt barund auch bearbeitet.

Ich möchte git diff fooin HEADund barin meinem aktuellen Arbeitsbaum.

MiJyn
quelle
64
Ich dachte, diese Frage (aus dem Titel) könnte sich auf die Verwendung von Git Diff für zwei Dateien beziehen, die nicht unbedingt in einem Repo enthalten sind. Ich fand, dass das Flag --no-index dafür ist, z. B. git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff hebt Änderungen nach Wort hervor, nicht nur nach Zeile, was für Langtext sehr hilfreich ist).
Pat

Antworten:

132

Geben Sie die Pfade explizit an:

git diff HEAD:full/path/to/foo full/path/to/bar

Überprüfen Sie die --find-renamesOption in den git-diff Dokumenten .

Gutschrift: twaggs .

Steven Wexler
quelle
8
Ich möchte erwähnen, dass Sie zwei beliebige Dateien mit vergleichen können, git diff <path> <path>auch wenn sie sich nicht in einem Git-Repository befinden.
Mitenka
1
@mitenka Ich denke nicht, dass das richtig ist. Wenn Sie sich ansehen, werden git diff --helpSie sehen, dass die einzigen Muster, die für zwei Dateien unterstützt werden, sind git diff [<options>] --no-index [--] <path> <path>. git diff a bEntspricht nur Festschreibungsmustern, nicht Dateien.
Doug
@Doug Hier ist das Zitat aus dem Hilfebefehl, den Sie erwähnt haben : git-scm.com/docs/git-diff : Zeigen Sie [...] Änderungen zwischen zwei Dateien auf der Festplatte an.
Mitenka
@mitenka Die Hilfe sagt, wenn Sie nicht '--no-index' verwenden, werden keine Dateien verglichen. Ihr Kommentar sollte eine separate Antwort sein. es ist nicht wahr und es ist nicht relevant für diese Antwort.
Doug
@ Doug Vielen Dank für Ihre Meinung. Hier ist das Zitat aus der Hilfe, auf das Sie verweisen: Sie können die --no-indexOption weglassen, wenn Sie den Befehl in einem von Git gesteuerten Arbeitsbaum ausführen und mindestens einer der Pfade außerhalb des Arbeitsbaums zeigt oder wenn Sie den Befehl außerhalb eines von Git gesteuerten Arbeitsbaums ausführen .
Mitenka
74

Ich glaube, mit --no-indexist das, wonach Sie suchen:

git diff [<options>] --no-index [--] <path> <path>

wie im Git-Handbuch erwähnt:

In diesem Formular werden die beiden angegebenen Pfade im Dateisystem verglichen. Sie können die Option weglassen,--no-index wenn Sie den Befehl in einem von Git gesteuerten Arbeitsbaum ausführen und mindestens einer der Pfade außerhalb des Arbeitsbaums zeigt oder wenn Sie den Befehl außerhalb eines von Git gesteuerten Arbeitsbaums ausführen.

mh sattarian
quelle
1
@swe das ist definitiv eine nützliche Antwort, aber das OP hat ausdrücklich angegeben, dass sich die Datei in HEAD befindet, was bedeutet, dass sie sich in einem Git-Index befindet. Die akzeptierte Antwort adressiert direkt die Frage. Auch die akzeptierte Antwort hatte einen Vorsprung von 6 Jahren;)
Michael Delgado
1
Dies hat OP vielleicht nicht geholfen, aber es war genau das, wonach ich gesucht habe.
thislooksfun
3

Wenn Sie Tortoise Git verwenden, können Sie mit der rechten Maustaste auf eine Datei klicken und einen Diff gitieren, indem Sie mit der rechten Maustaste auf die erste Datei klicken und im Untermenü Tortoisegit "Diff later" auswählen. In der zweiten Datei können Sie auch mit der rechten Maustaste darauf klicken Gehen Sie zum Untermenü Tortoisegit und wählen Sie "Diff with yourfilenamehere.txt".

Camjocotem
quelle
-12

Mit PhpStorm kopiere ich einfach den vorherigen Commit-Code und vergleiche ihn mit der aktuellen Version mit dem integrierten Tool "Mit Zwischenablage vergleichen".

Stevie Wonder
quelle
4
PhpStorm ist eine kommerzielle IDE. Bei dieser Frage geht es darum, wie dies innerhalb der Git Cli selbst zu tun ist, ohne dass zusätzliche Software vorausgesetzt wird.
Charles Taylor