Ich habe ein Skript, das in einem Zweig gut funktioniert und in einem anderen gebrochen ist. Ich möchte die beiden Versionen nebeneinander betrachten und sehen, was sich unterscheidet. Gibt es irgendwelche Möglichkeiten, dies zu tun?
Um klar zu sein Ich suche kein Vergleichstool (ich benutze Beyond Compare). Ich suche nach einem git diff-Befehl, mit dem ich die Master-Version mit meiner aktuellen Zweigversion vergleichen kann, um zu sehen, was sich geändert hat. Ich bin nicht mitten in einer Fusion oder irgendetwas. Ich möchte nur etwas sagen
git diff mybranch/myfile.cs master/myfile.cs
git diff
kann Ihnen den Unterschied zwischen zwei Commits zeigen:
git diff mybranch master -- myfile.cs
Oder gleichwertig:
git diff mybranch..master -- myfile.cs
Wenn unter Verwendung der letzteren Syntax eine der beiden Seiten HEAD
ist, kann sie weggelassen werden (beispielsweise master..
vergleicht master
mit HEAD
).
Sie könnten auch interessiert sein an mybranch...master
(von git diff
docs ):
Dieses Formular dient zum Anzeigen der Änderungen in dem Zweig, der bis zum zweiten
<commit>
enthält, beginnend mit einem gemeinsamen Vorfahren beider<commit>
.git diff A...B
entsprichtgit diff $(git-merge-base A B) B
.
Mit anderen Worten, dies führt zu einem Unterschied der Änderungen in master
, da er von mybranch
abweicht (jedoch ohne neue Änderungen seitdem in mybranch
).
In allen Fällen gibt das Trennzeichen --
vor dem Dateinamen das Ende der Befehlszeilenflags an. Dies ist optional, es sei denn, Git wird verwirrt, wenn sich das Argument auf ein Commit oder eine Datei bezieht. Das Hinzufügen ist jedoch keine schlechte Angewohnheit. Siehe https://stackoverflow.com/a/13321491/54249 für einige Beispiele.
Die gleichen Argumente können an git difftool
übergeben werden, wenn Sie eines konfiguriert haben.
Sie können dies tun: git diff branch1:file branch2:file
Wenn Sie ein difftool konfiguriert haben, können Sie auch: git difftool branch1:file branch2:file
Zugehörige Frage: Wie kann ich die git diff-Ausgabe mit dem visual diff-Programm anzeigen?
Modernere Syntax:
git diff ..master path/to/file
Das Doppelpunkt-Präfix bedeutet "vom aktuellen Arbeitsverzeichnis bis". Du kannst auch sagen:
master..
, d.h. die Umkehrung von oben. Dies ist dasselbe wie master
.mybranch..master
, der explizit auf einen anderen Status als den aktuellen Arbeitsbaum verweist.v2.0.1..master
, d. h. auf ein Tag verweisen.[refspec]..[refspec]
, im Grunde alles, was als Code-Status identifiziert werden kann.Es gibt viele Möglichkeiten, Dateien aus zwei verschiedenen Zweigen zu vergleichen:
Option 1: Wenn Sie die Datei von einem bestimmten Zweig mit einem anderen bestimmten Zweig vergleichen möchten:
git diff branch1name branch2name path/to/file
Beispiel:
git diff mybranch/myfile.cs mysecondbranch/myfile.cs
In diesem Beispiel vergleichen Sie die Datei im Zweig "mybranch" mit der Datei im Zweig "mysecondbranch".
Option 2:Einfacher Weg:
git diff branch1:file branch2:file
Beispiel:
git diff mybranch:myfile.cs mysecondbranch:myfile.cs
Dieses Beispiel ähnelt der Option 1.
Option 3: Wenn Sie Ihr aktuelles Arbeitsverzeichnis mit einem Zweig vergleichen möchten:
git diff ..someBranch path/to/file
Beispiel:
git diff ..master myfile.cs
In diesem Beispiel vergleichen Sie die Datei von Ihrem aktuellen Zweig mit die Datei im Hauptzweig.
Ich mache einfach git diff branch1 branch2 path/to/file
Dies prüft auf Unterschiede zwischen den Dateien. Änderungen in branch1
wären rot. Änderungen in branch2
wären grün.
Es wird angenommen, dass branch1
die Vergangenheit und branch2
die Zukunft ist. Sie können dies rückgängig machen, indem Sie die Reihenfolge der Zweige im Diff umkehren: git diff branch2 branch1
Zustimmung zu der von @dahlbyk vorgeschlagenen Antwort. Wenn der Diff in eine diff-Datei für Code-Reviews geschrieben werden soll, verwenden Sie den folgenden Befehl.
git diff branch master -- filepath/filename.extension > filename.diff --cached
Wenn Sie einen Vergleich mit dem aktuellen Zweig machen möchten, können Sie ihn weglassen und verwenden:
git diff BRANCH -- path/to/file
auf diese Weise wird es vom aktuellen Zweig zum referenzierten Zweig (BRANCH) unterschieden.
In meinem Fall verwende ich den folgenden Befehl:
git diff <branch name> -- <path + file name>
Mit diesem Befehl können Sie dieselbe Datei in zwei verschiedenen Zweigen vergleichen
Am besten verwenden Sie git diff
auf folgende Weise: git diff <source_branch> <target_branch> -- file_path
Es wird der Unterschied zwischen den Dateien in diesen Zweigen geprüft. In diesem Artikel finden Sie weitere Informationen zu git-Befehlen und deren Funktionsweise.
Verwenden Sie Commit-Hashes wie folgt:
git diff <hash1> <hash2> <filename>
dabei kann hash1 ein beliebiges Commit aus einem beliebigen Zweig sein, das gleiche gilt für hash2 .
Um zwei Dateien in der git-bash zu vergleichen, müssen Sie den Befehl verwenden:
git diff <Branch name>..master -- Filename.extension
Dieser Befehl zeigt den Unterschied zwischen den beiden Dateien in der Bash selbst.