Git: Wie kann man zwei verschiedene Dateien in verschiedenen Zweigen unterscheiden?

170

Ich habe zwei verschiedene Dateien in verschiedenen Zweigen. Wie kann ich sie in einem Befehl unterscheiden?

Etwas wie

# git diff branch1/foo.txt branch2/foo-another.txt

Ich könnte die andere Datei auschecken, unterscheiden und wiederherstellen, aber das ist eine ziemlich schmutzige Lösung.

Ondra Žižka
quelle
3
@EugenKonkov Es ist kein Duplikat, da in dieser Frage gefragt wird, wie verschiedene Dateien in verschiedenen Zweigen unterschieden werden sollen. In der verknüpften Frage wird nur gefragt, wie dieselbe Datei in verschiedenen Zweigen unterschieden werden soll.
Steve

Antworten:

214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

Sie können auch relative Pfade verwenden:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
Twaggs
quelle
9
Genial! Daraus konnte ich sicher nicht schließen git help diff. Übrigens müssen dies keine Verzweigungsnamen vor den Doppelpunkten sein, sondern können beliebige Commit-Referenzen sein (z. B. SHA-1-Werte).
Steve Jorgensen
3
Wichtiger Hinweis: Für Git unter Windows muss die vollständige Elementspezifikation ein Unix-Name sein. dh branch1: full \ path \ to \ foo.txt schlägt fehl, während branch1: full / path / to / foo.txt einwandfrei funktioniert, ebenso wie full \ path \ to \ foo.txt (kein Branch)
Eris
Verwenden Sie git difftoolund lassen Sie das branch2:und fallen, damit Sie eine Datei im aktuellen Arbeitsbaum bearbeiten können (um Änderungen von zu übernehmen branch1)
gMale
Versucht unter Linux mit Git-Version 1.8.3.1, nur relative Pfade erlaubt.
Sola Yang
21

Nebenbemerkung: Es sind keine vollständigen Pfade erforderlich. Sie können mit ./relativen Pfaden beginnen. Es kann manchmal praktisch sein.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
Campa
quelle
2

Es gibt viele Möglichkeiten, Dateien aus zwei verschiedenen Branchen zu vergleichen. Beispielsweise:

  • Wenn der Name gleich oder verschieden ist:

     git diff branch1:file branch2:file
    

    Beispiel:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Nur wenn der Name identisch ist und Sie Ihr aktuelles Arbeitsverzeichnis mit einem Zweig vergleichen möchten:

    git diff ..someBranch path/to/file
    

    Beispiel:

    git diff ..branch2 full/path/to/foo.txt
    

    In diesem Beispiel vergleichen Sie die Datei aus Ihrem tatsächlichen Zweig mit der Datei im Hauptzweig.

Sie können diese Antwort überprüfen:

Vergleichen Sie eine Datei von zwei verschiedenen Zweigen in Git

Javier C.
quelle
1

Off-Topic-Antwort - siehe Kommentare

Nur um es hinzuzufügen, finde ich es eine sehr einfache Syntax:

git diff <branch1> <branch2> <filepath>

Funktioniert auch mit relativen Refs wie zum Beispiel:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>
RomainValeri
quelle
1
Das OP fragte ausdrücklich nach "verschiedenen Dateien". Bei Ihrer Antwort geht es darum, dieselbe Datei in zwei verschiedenen Zweigen zu vergleichen.
Etienne Miret
@EtienneMiret Du hast absolut Recht, ich habe diesen wichtigen Punkt verpasst. Off-Topic-Antwort.
RomainValeri
-1

Sie können einen Start und einen Bereich angeben git diff, auf den angewendet werden soll. Der Bereich wird mit der ..Notation angegeben.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path
JCF
quelle
Dies vergleicht nur dieselbe Datei in zwei Zweigen. Die Frage betraf zwei verschiedene Dateien in zwei Zweigen.
Piran