Git Visual Diff zwischen Zweigen

196

Diese Antwort ist ideal, um einen visuellen Unterschied zwischen zwei Dateien zu sehen, die in git eingecheckt sind: Wie kann ich die Ausgabe von "git diff" mit einem visuellen Diff-Programm anzeigen?

Ich würde jedoch gerne einen visuellen Unterschied zwischen zwei Zweigen sehen. Bisher scheint meine beste Wette zu sein:

git diff --name-status master dev

Das ist nicht sehr informativ und nicht sehr visuell.

Gibt es da draußen etwas Besseres?

Snowcrash
quelle
Ich habe unten eine Antwort hinzugefügt, die ein Bild enthält, das zuvor hier nicht angesprochen wurde: Wie kann man sehen, welche Commit-Zweige enthalten (ob gemeinsam oder eindeutig)? Mit der Core-Git-Funktionalität können Sie viel anfangen. Es kann sinnvoll sein, anzugeben, was Sie in Ihr visuelles Diff aufnehmen möchten. Die meisten Antworten konzentrieren sich auf zeilenweise Unterschiede bei Commits, wobei sich Ihr Beispiel auf die Namen der Dateien konzentriert, die von einem bestimmten Commit betroffen sind.
Kay V

Antworten:

227

Verwenden Sie git diffmit einem Bereich .

git diff branch1..branch2

Dadurch werden die Tipps der einzelnen Zweige verglichen.

Wenn Sie wirklich eine GUI-Software möchten, können Sie etwas wie SourceTree ausprobieren, das Mac OS X und Windows unterstützt.

Alex
quelle
27
Es ist kein visuelles Reh. ;)
Marines
35
In Linux - Systemen empfehle ich die Installation Meld, dann ist es als Standard - Einstellung difftoolmit git config --global diff.tool meldund es schließlich statt Ebene starten diffmit git difftool branch1..branch2. Das Ergebnis sieht viel besser aus.
Gabriel
8
Verwenden von Meld Visual Difftool ohne Git-Konfiguration:git difftool -t meld branch1..branch2
User3780389
2
Für Leser: Ab meinem Beitrag gibt jede Antwort hier eine Möglichkeit, das zu tun, wonach die Person gefragt hat (ein Unterschied in einer GUI), mit Ausnahme dieser Antwort.
G Huxley
3
@ GHuxley Wo fragt das OP nach einer GUI-Lösung?
Alex
97

Um einen visuellen Unterschied aller Unterschiede zwischen zwei Zweigen zu sehen, möchte ich die beiden Zweige zusammenführen - OHNE die Zusammenführung festzuschreiben - und dann verwenden git gui oder git Extensions einen Überblick über die Unterschiede erhalten.

Git-Befehlszeile zum Zusammenführen ohne Festschreiben:

Git Checkout BranchA
git merge --no-commit --no-ff branchB

Wenn Sie fertig sind, können Sie die Zusammenführung mit rückgängig machen

git merge --abort

(h / t an @ jcugat's für den Kommentar)

Tormod Hystad
quelle
10
Unterschätzen Sie nicht die Relevanz dieses Ansatzes, wenn Sie Ihre IDE (oder ein anderes nicht immer einfach in Git zu integrierendes GUI-Difftool) verwenden möchten! Diese Option ist fantastisch für mich, da ich Intellij verwende und es sehr bevorzuge, geänderte Dateien in der IDE in all ihrer Syntax-hervorgehobenen, Fehler-hervorgehobenen, Dead-Code-hervorgehobenen, an Ort und Stelle bearbeitbaren Pracht zu durchsuchen. Ich verwende diesen Ansatz für alle meine Codeüberprüfungen und habe das Vergleichstool für abgründige Pull-Anforderungen in GitHub weit hinter mir gelassen. Ich kann sogar Änderungen vornehmen, wenn ich fertig bin, und wenn ich fertig bin, erstelle ich einfach einen neuen Zweig mit angehängtem "-code-review" und Commit!
kghastie
2
Es funktioniert so lange, wie keine Zusammenführungskonflikte vorliegen, und schlägt fehl, wenn Zusammenführungskonflikte vorliegen.
Naga Kiran
1
Ich mag diesen Ansatz sehr! Zumindest für mich git guizeigt es die Konflikte als nicht inszeniert, die Nichtkonflikte als inszeniert, so dass Sie sogar eine gute Unterscheidung erhalten. Hilft mir viel mehr als die bestbewertete Antwort: D
DJGummikuh
55

Wenn Sie die Intellij Idea IDE verwenden, können Sie einfach die Vergleichsoption in der Verzweigung verwenden.

Geben Sie hier die Bildbeschreibung ein

Kamal Reddy
quelle
Gibt es Konfigurationen / Optionen / Einstellungen, um diesen Vergleich zu ändern? (wie --ignore-space-at-eol für git diff)
Superole
49

Sie können dies auch einfach mit gitk tun.

> gitk branch1 branch2

Klicken Sie zuerst auf die Spitze von branch1. Klicken Sie nun mit der rechten Maustaste auf die Spitze von branch2 und wählen Sie Diff this-> selected.

Martin
quelle
7
Mit gitk branch1..branch2nur zeigt begeht zwischen den beiden Revisionen.
T3rm1
Verwenden Sie gitk (ohne branch1 branch2), wenn Sie alle Änderungen anzeigen möchten, die Sie in Ihrem Branch vorgenommen haben.
Mikewasmike
31

Für diejenigen unter Windows, die TortoiseGit verwenden, können Sie durch diese eher undurchsichtige Funktion einen etwas visuellen Vergleich erzielen:

  1. Navigieren Sie zu dem Ordner, den Sie vergleichen möchten
  2. Halten Sie gedrückt shiftund klicken Sie mit der rechten Maustaste darauf
  3. Gehen Sie zu TortoiseGit -> Referenz durchsuchen
  4. Verwenden Sie ctrldiese Option, um zwei zu vergleichende Zweige auszuwählen
  5. Klicken Sie mit der rechten Maustaste auf Ihre Auswahl und klicken Sie auf "Ausgewählte Referenzen vergleichen".

Quelle: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/

Oversearch
quelle
Warum sollten Sie die Schicht gedrückt halten?
Zero3
1
Wenn Sie die Umschalttaste gedrückt halten, während Sie mit der rechten Maustaste klicken, wird immer das vollständige TortoiseGit-Menü angezeigt, falls Sie TortoiseGit so konfiguriert haben, dass bestimmte Elemente nicht angezeigt werden.
Oversearch
Das ist fantastisch. Ich wünschte, es wäre ein prominenteres Merkmal.
Drew
22

Wenn Sie OSX oder Windows 7+ verwenden, funktioniert Atlassian SourceTree sehr gut. Es ist frei.

Sie können abgestufte Änderungen in einem Side-by-Side-Diff-Setup sehen und lokale mit einfachen und zwei anderen Zweigen vergleichen. Wenn mehrere Dateien ausgewählt sind, wird der Unterschied wie folgt angezeigt:

Geben Sie hier die Bildbeschreibung ein

Angenommen, Sie haben einen Feature-Zweig ausgecheckt und möchten den Diff gegen 'Master' sehen, klicken Sie mit der rechten Maustaste auf den 'Master'-Zweig und wählen Sie "Diff gegen Strom".

Leider scheint es nicht so, als ob es bald auf * nix-Distributionen verfügbar sein wird .

Jordan Parker
quelle
3
Es mag "kostenlos" sein, aber es erfordert sicherlich einige Zeit, um die Nutzungsbedingungen für die Registrierung zu lesen: atlassian.com/legal/customer-agreement Ich habe das Tool bisher gemocht, aber das könnte mich abschrecken .
Akauppi
@akauppi Welche Teile haben dich abgeschreckt? Ich dachte , alle diese Vereinbarungen ziemlich gleich waren
alex
Das war vor über einem Jahr. Ja, Vereinbarungen mögen ähnlich sein, aber es war der Prozess, durch den SourceTree mich geführt hat. Es war seltsam. Vorbei aber. Ich werde die Details nicht für dich haben. Entschuldigung
Akauppi
16

Versuchen Sie "difftool" (vorausgesetzt, Sie haben verschiedene Tools eingerichtet) - siehe https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Ich finde den Namensstatus gut für die Zusammenfassung, aber difftool wiederholt die Änderungen (und die -dOption gibt Ihnen die Verzeichnisansicht), z

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Oder wie @ rsilva4 mit -dund standardmäßig für Ihren aktuellen Zweig erwähnt, ist es nur - zB mit Master vergleichen:

$  git difftool -d master..

... und ja - es gibt viele Variationen - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html

Paul Kohler
quelle
3
Danke, das war nützlich. Das Hinzufügen der Option -d macht die Dinge noch besser:git difftool -d their-abc my-abc
rsilva4
Da -d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
EXPLAINSHELL.com
8

Wenn Sie Github verwenden, können Sie die Website dafür verwenden:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Das zeigt Ihnen einen Vergleich der beiden.

Arron
quelle
Dies funktioniert (ich mache es die ganze Zeit), aber es erfordert, dass Sie Ihren Code an das Github-Repo senden. Das ist meiner Meinung nach jedoch keine akzeptable Einschränkung.
Adamwong246
2
oder einfach github.com/url/to/your/repo/compare/und dann können Sie die Zweige auswählen
Caramba
Und wie bekomme ich diesen SHA? Ich meine, was bedeutet SHA der Spitze eines Zweigs?
Optimus Prime
8

In GitExtensions können Sie beide Zweige im Revisionsraster mit Ctrlgedrückter Taste auswählen . Dann können Sie Dateien sehen, die sich zwischen diesen Zweigen unterscheiden. Wenn Sie eine Datei auswählen, wird diff dafür angezeigt.

Von hier genommen

Mahmoodvcs
quelle
Ich habe 2 Zweige in meinem Revisionsraster ausgewählt, aber ich sehe keine Vergleichsbefehle im Menü oben oder wenn ich mit der rechten Maustaste klicke.
Eric
1
Ich habe es in den Überschriften der unteren Scheibe gefunden. Es gibt Commit, File Tree und Diff.
Eric
7

AKTUALISIEREN

Mac: Ich benutze jetzt SourceTree. Sehr zu empfehlen. Mir gefällt besonders die Art und Weise, wie man Kerle inszenieren / entbühnen kann.

Linux: Ich hatte Erfolg mit:

  • Smartgit
  • GitKraken
  • meld

ZB smartgitunter Ubuntu installieren :


Das macht den Job:

git-diffall mit einem GUI-Diff-Tool wie meld. Siehe Punkt 5 hier:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Hier gibt es einen schönen Beitrag über Git und Verschmelzung: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

Snowcrash
quelle
4

Wenn Sie Eclipse verwenden, können Sie Ihren aktuellen Zweig im Arbeitsbereich visuell mit einem anderen Tag / Zweig vergleichen:

Eclipse-Arbeitsbereich vergleichen

Alessandro Dionisi
quelle
Persönlich finde ich die Eclipse-Unterstützung für unterdurchschnittliche Unterschiede, aber wenn das alles ist, was Sie haben, ist es in Ordnung.
Ysap
4

Sie können dazu auch das kostenlose P4Merge von Perforce verwenden:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

Geben Sie hier die Bildbeschreibung ein

Details zur Integration in Git finden Sie hier und hier

Eine kurze Zusammenfassung der oben genannten Links lautet jedoch:

  • Fügen Sie die folgenden Bits in Ihre ~ / .gitconfig ein, und dann können Sie $ git mergetoolund$ git difftool zu verwenden p4merge
  • Beachten Sie, dass $ git diffimmer noch nur der Standard-Inline-Diff-Viewer verwendet wird :) (getestet mit Git-Version 1.8.2)

Änderungen für .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""
Brad Parks
quelle
2

Wenn Sie den hervorragenden WebStorm-Editor verwenden, können Sie ihn mit jedem gewünschten Zweig vergleichen: Webstorm Git vergleichen

Nico
quelle
Eigentlich ist mir gerade aufgefallen, dass IntelliJ IDEA (vermutlich auch WebStorm) die Möglichkeit hat, "nicht ausgewählte Commits hervorzuheben", was sehr deutlich macht, welche Commits in einem Zweig vorhanden sind, aber nicht in einem anderen.
Arthurakay
Ja, ich habe nur Intellij verwendet, um eine Menge Änderungen, die über ein Repo von "autoformat on save" vorgenommen wurden, selektiv abzurollen. War sehr einfach ... Musste die Option "Vorher mit lokal vergleichen" finden, um dies zu tun
Tom H
1

Schau es dir an git show-branch

Mit der Core-Git-Funktionalität können Sie viel anfangen. Es kann sinnvoll sein, anzugeben, was Sie in Ihr visuelles Diff aufnehmen möchten. Die meisten Antworten konzentrieren sich auf zeilenweise Unterschiede bei Commits, wobei sich Ihr Beispiel auf die Namen der Dateien konzentriert, die von einem bestimmten Commit betroffen sind.

Ein visuelles Element, das anscheinend nicht angesprochen wird, ist das Anzeigen der Commits, die in Zweigen enthalten sind (ob gemeinsam oder eindeutig).

Für dieses Bild bin ich ein großer Fan von git show-branch; Es wird eine gut organisierte Tabelle mit Commits pro Zweig für den gemeinsamen Vorfahren erstellt. - Um es auf einem Repo mit mehreren Zweigen mit Abweichungen zu versuchen, geben Sie einfach git show-branchdie Ausgabe ein und überprüfen Sie sie. - Eine Beschreibung mit Beispielen finden Sie unter Vergleichen von Commits zwischen Git-Zweigen

Kay V.
quelle
0

So sehen Sie den visuellen Unterschied zwischen ganzen Commits im Gegensatz zu einzelnen Dateien in Visual Studio (getestet in VS 2017). Leider funktioniert es nur für Commits innerhalb eines Zweigs: Wählen Sie im "Team Explorer" die Ansicht "Zweige", klicken Sie mit der rechten Maustaste auf das Repo und wählen Sie "Verlauf anzeigen" wie im folgenden Bild.

Geben Sie hier die Bildbeschreibung ein

Dann erscheint die Geschichte des aktuellen Zweigs im Hauptbereich. (Wo Zweige, die als frühere Commits für den aktuellen Zweig endeten, durch Beschriftungen gekennzeichnet sind.) Wählen Sie nun einige Commits mit Strg-Links aus, klicken Sie mit der rechten Maustaste und wählen Sie "Commits vergleichen ..." aus dem Einblendmenü.

Weitere Informationen zum Vergleichen von Zweigen in der Microsoft-Welt finden Sie in dieser Frage zum Stapelüberlauf: Unterschiede zwischen Git-Zweigen mit Visual Studio .

Carsten Führmann
quelle
1
Zeigt nur den Verlauf eines einzelnen Zweigs an und kann daher nicht zwischen Zweigen verglichen werden.
Michał Fita