it-swarm.com.de

Wie vergleiche ich Dateien aus zwei verschiedenen Zweigen?

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
1220
Micah

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 entspricht git 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.

1781
dahlbyk

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?

341
Tim Henigan

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.
135
Joe Atzberger

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.

15
Javier C.

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

8
iGbanam

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
3
Azad

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.

1
Paulo Fidalgo

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

1
SKT

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.

0
Nesha Zoric

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 .

0
prometeu

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.

0
Rishav_SO