wake-up-neo.net

Unterschiede zwischen den Filialen anzeigen

Ich weiß, dass ich den Unterschied zwischen HEAD und dem aktuellen Status mit meld . anzeigen kann. Aber wie kann ich die Unterschiede zwischen Zweigen anzeigen, zum Beispiel master und devel mit meld?

Im Moment mache ich folgende Schritte:

  1. Ordner umbenennen in Arbeitskopie
    Zum Beispiel mv /projectA /projectA_master)
  2. Klonen Sie das Projekt erneut 
    git clone url
  3. Wechseln Sie in den Zweig devel 
    cd projectA && git -b devel Origin/devel 
  4. Unterschiede bei der Anzeige anzeigen 
    meld /projectA_Master projectA

Gibt es nicht einen einfacheren Weg, um in meld das gleiche Ergebnis zu erzielen? Ich brauche es nur, um die Änderungen zu überprüfen und nicht in erster Linie für das Zusammenführen.

143
Marten Bauer

Ich fand dieses Problem auch ärgerlich, also habe ich git meld gemacht, was eine bequemere Möglichkeit bietet, willkürliche Commits gegen den Arbeitsbaum oder den Bereitstellungsbereich abzugrenzen. Sie finden es unter https://github.com/wmanley/git-meld . Es ist ein bisschen wie bei Marks Skript, kann aber beliebiges Commit, den Staging-Bereich oder das Arbeitsverzeichnis mit den anderen vergleichen. Wenn einer der Dinge, mit denen Sie vergleichen, der Arbeitsbaum ist, dann ist dies auch Lese- und Schreibzugriff, damit Sie Ihre Änderungen nicht verlieren.

52
Will Manley

Kurz & süß:

git config --global diff.tool meld

Dadurch wird Git so konfiguriert, dass meld als Diff-Tool verwendet wird. (Sie müssen keine Befehlszeilenargumente angeben. Die Unterstützung für meld ist in Git integriert.)

Wenn Sie einen grafischen Vergleich statt eines Textdatensatzes wünschen, rufen Sie einfach git difftool anstelle von git diff auf (sie haben beide die gleichen Argumente). In Ihrem Fall:

git difftool master..devel

Aktualisieren: Wenn Sie nicht den One-File-at-a-time-Diff verwenden möchten, sondern stattdessen die Ansicht "Unterverzeichnis" von meld mit allen Änderungen zwischen den beiden Zweigen verwenden möchten, beachten Sie die Option -d oder --dir-diff für git difftool. Wenn ich zum Beispiel in Zweig XYZ bin und sehen möchte, was sich zwischen Zweig und ABC unterscheidet, führe ich Folgendes aus:

git difftool -d ABC
290
Jörg W Mittag

Mit git v1.7.11 können Sie git difftool --dir-diff verwenden, um einen Verzeichnisunterschied auszuführen. Was gut funktioniert mit meld ohne https://github.com/wmanley/git-meld scripts.

Konfigurieren Sie git

git config --global diff.tool meld

Benutze es

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic

Für macOS

brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true
93
GutenYe

Es ist wichtig zu sagen, dass Sie mit git difftool -d _ Ihre Arbeitsdateien in Meld und können noch bearbeiten und speichern. Um dies zu erreichen, müssen Sie einen Zweig mit Ihrem aktuellen Arbeitsbaum vergleichen, zum Beispiel:

git difftool -d branchname

Meld zeigt an, dass sich sowohl das linke als auch das rechte Verzeichnis in/tmp befinden. Dateien im rechten Verzeichnis sind jedoch tatsächlich symbolische Links zu Ihren Dateien im aktuellen Arbeitsverzeichnis (gilt nicht für Windows). Sie können sie also direkt in Meld bearbeiten und beim Speichern werden Ihre Änderungen in Ihrem Arbeitsverzeichnis gespeichert.

Eine noch interessantere Option ist der Vergleich des aktuellen Arbeitsverzeichnisses mit dem Vorrat. Sie können dies tun, indem Sie einfach Folgendes eingeben:

git difftool -d stash

Dann können Sie einige Änderungen vom Stash (linkes Fenster) auf Ihre aktuelle Arbeitskopie (rechtes Fenster) übertragen, ohne git stash pop/apply zu verwenden und lästige Konfliktlösungen zu vermeiden, die durch diese Befehle verursacht werden können.

Ich denke, es kann den Arbeitsfluss mit Stashes erheblich steigern. Sie können die Änderungen schrittweise von der Vorratsmenge in die Arbeitskopie übertragen und nacheinander festschreiben, wenn Sie möchten.

10

Ich denke, ein einfacher Weg, dies zu tun, ist git reset --soft:

Ziel: Vergleichen Sie die Unterschiede zwischen branch_a und branch_b mit meld

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
5
realtime

Obwohl es bei den anderen Antworten so aussieht, als ob es im Moment keine Möglichkeit gibt, dies direkt im git-Repository zu tun, ist es (dank der Antwort auf eine andere Frage :)) leicht, ein Skript zu schreiben, das die Bäume von zwei Commits für temporäre Verzeichnisse und Ausführen von MELDE auf ihnen, und entfernen beide Verzeichnisse, wenn MELE beendet wird:

http://Gist.github.com/498628

Natürlich verlieren Sie alle Änderungen, die Sie über Meld vorgenommen haben, aber es ist ganz nett für einen schnellen Überblick über die Unterschiede, denke ich.

5
Mark Longair

In git V1.7.9 können Sie zwei Commits ohne die Befehlszeile vergleichen:

Sie müssen in 'git gui' Bearbeitungsoptionen konfigurieren, global: "Zusammenführungswerkzeug verwenden: meld".

Starten Sie gitk , wählen Sie ein Commit aus, klicken Sie mit der rechten Maustaste auf ein anderes Commit> " diff this -> selected " . Klicken Sie unter "Patch" mit der rechten Maustaste auf eine Datei> " external diff ".

meld wird gestartet und zeigt das noch ausgewählte erste Commit auf der rechten Seite.

1
Stefan Forster

Ich kann unter Piort Jurkiewicz nicht antworten auf den Kommentar von pykiss: "Neue Dateien vom Zweig in Arbeitsverzeichnis kopieren funktioniert nicht :("

Die Lösung zum Kopieren von file.txt aus branch_B in den Arbeitszweig branch_A lautet:

git chechout branch_B -- file.txt

von diese Antwort an diese Frage . Ich weiß nicht, wie ich es innerhalb von meld selbst machen soll.

0
Geoffroy

Wenn Sie ein sauberes Arbeitsverzeichnis und einen sauberen Index haben (oder sich nicht darum kümmern), dann sollten Sie Folgendes tun:

git diff master..devel | patch -p1 && meld . && git reset --hard
0
sqrt163