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:
mv /projectA /projectA_master
)git clone url
devel
cd projectA && git -b devel Origin/devel
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.
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.
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
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
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.
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 .
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:
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.
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.
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.
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