Wie kann man einen Merge-Commit mit kombinierter Diff-Ausgabe “git zeigen”, selbst wenn jede geänderte Datei mit einem der Eltern übereinstimmt?

Lesezeit: 6 Minuten

Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
Tilmann Vogel

Nachdem Sie eine “einfache” Zusammenführung (eine ohne Konflikte) durchgeführt haben, git show normalerweise zeigt nur so etwas wie

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

Merge branch 'testing' into master

Dies liegt daran, dass bei Zusammenführungen git show verwendet das kombinierte Diff-Format, das Dateien auslässt, die mit einer der Elternversionen übereinstimmen.

Gibt es eine Möglichkeit, Git zu zwingen, weiterhin alle Unterschiede im kombinierten Diff-Modus anzuzeigen?

Tun git show -m zeigt die Unterschiede (unter Verwendung paarweiser Unterschiede zwischen der neuen und allen Elternversionen), aber ich würde es vorziehen, wenn die Unterschiede in den jeweiligen Spalten mit +/- markiert sind, wie im kombinierten Modus.

  • @ Tilman Vogel: Bitte überprüfen Sie die akzeptierte Antwort – Sieht so aus, als gäbe es bessere Antworten

    – Jayan

    22. November 2017 um 0:25 Uhr

  • @Jayan Während die anderen Antworten beliebter sind, weil sie nützliche Hinweise enthalten, kommen sie meinem Problem nicht näher, da sie nur Zwei-Wege-Diffs machen. Ich war auf der Suche nach einem 3-Wege-Diff.

    – Tilmann Vogel

    23. November 2017 um 1:03 Uhr

Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
rip747

Sehen Sie sich die Commit-Nachricht an:

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

Merge branch 'testing' into master

beachten Sie die Zeile:

Merge: fc17405 ee2de56

Nehmen Sie diese beiden Commit-IDs und kehren Sie sie um. Um also den gewünschten Unterschied zu erhalten, würden Sie Folgendes tun:

git diff ee2de56...fc17405

um nur die Namen der geänderten Dateien anzuzeigen:

git diff --name-only ee2de56..fc17405

und um sie zu extrahieren, können Sie dies zu Ihrer gitconfig hinzufügen:

exportfiles = !sh -c 'git diff $0 --name-only | "while read files; do mkdir -p \"$1/$(dirname $files)\"; cp -vf $files $1/$(dirname $files); done"'

dann verwenden Sie es, indem Sie Folgendes tun:

git exportfiles ee2de56..fc17405 /c/temp/myproject

  • Danke für den Vorschlag, aber ich glaube, das löst mein Problem nicht. Aufgrund der begrenzten Kommentarmarkierung und -formatierung habe ich Ihrer Antwort meinen Kommentar hinzugefügt. Das tut mir leid! Muss von Experten begutachtet werden, bis es sichtbar ist.

    – Tilmann Vogel

    8. September 2011 um 8:12 Uhr


  • Anscheinend wurde meine Änderung abgelehnt. Zusammenfassend: Ihr Diff zeigt nicht an, welche Ergänzungen aus welchem ​​​​Zweig stammen. Und Sie können nicht unterscheiden, ob Änderungen im zweiten Zweig hinzugefügt oder im ersten Zweig entfernt wurden.

    – Tilmann Vogel

    8. September 2011 um 15:07 Uhr

  • Eine bessere Lösung ist git diff fc17405...ee2de56 – Dies zeigt alle Änderungen auf ee2de56, die von Commits auf fc17405 erreichbar sind, was meiner Meinung nach das ist, was Sie wollen. Beachten Sie die 3 Punkte anstelle von zwei.

    – Kris Nuttycombe

    20. August 2013 um 16:43 Uhr

  • @KrisNuttycombe 3 Punkte und die Reihenfolge. Und Ihr Kommentar ist das, wonach ich gesucht habe, was meiner Meinung nach eher dem entspricht, was das OP wollte.

    – Iskata

    10. Oktober 2013 um 2:13 Uhr

  • @KrisNuttycombe Das funktioniert irgendwie nicht mit git logdie immer noch alle Commits anzeigt, wie die .. Variante. .. und ... mach das gleiche für logaber für diff sie sind anders!? Wie erhalte ich eine Liste der Commits, die in diesen Zweig gemergt wurden?

    – Rudie

    11. November 2015 um 19:42 Uhr


1646244490 656 Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
CodeManX

Eine bessere Lösung (erwähnt von @KrisNuttycombe):

git diff fc17405...ee2de56

für den Merge-Commit:

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

um alle Änderungen anzuzeigen ee2de56 die ab Commits erreichbar sind fc17405. Beachten Sie die Reihenfolge der Commit-Hashes – sie ist dieselbe wie in den Zusammenführungsinformationen: Merge: fc17405 ee2de56

Beachten Sie auch die 3 Punkte ... statt zwei!

Für eine Liste der geänderten Dateien können Sie Folgendes verwenden:

git diff fc17405...ee2de56 --name-only

  • Das ist genau das, was ich nach +1 war.

    – geedoubleya

    17. Januar 2017 um 11:15 Uhr

  • Dies zeigt tatsächlich das Ergebnis eines Zusammenführungskonflikts, während die andere Antwort dies nicht tut.

    – Schote

    19. Februar 2020 um 10:36 Uhr

  • Das ist nicht richtig. Ich weiß nicht, warum es so viele Upvotes bekommen hat. Dadurch wird der Unterschied zwischen dem gemeinsamen Vorfahren und ee2de56 angezeigt, unabhängig davon, was im anderen Zweig oder im Merge-Commit passiert. (Aus dem Handbuch: "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B.")

    – philipp2100

    13. August 2020 um 13:26 Uhr


1646244491 31 Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
Seite2k

Sie können vor dem Zusammenführen einen Zweig erstellen, bei dem HEAD auf einen Commit festgelegt ist. Dann können Sie Folgendes tun:

git merge --squash testing

Dies wird zusammengeführt, aber nicht festgeschrieben. Dann:

git diff

Wenn Sie beim Merge-Commit sitzen, zeigt dies die Unterschiede:

git diff HEAD~1..HEAD

Wenn Sie nicht beim Merge-Commit sind, ersetzen Sie einfach HEAD durch den Merge-Commit. Diese Methode scheint die einfachste und intuitivste zu sein.

1646244492 724 Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
max630

Scheint hier beantwortet zu sein:
https://public-inbox.org/git/7vd392ezhx.fsf@alter.siamese.dyndns.org/

Also in ähnlicher Weise Laufen

$ git diff –cc $M $M^1 $M^2 $(git merge-base $M^1 $M^2)

sollte einen kombinierten Patch zeigen, der den Zustand bei $M relativ zu den Zuständen erklärt, die in seinen Eltern und der Merge-Basis aufgezeichnet sind.

  • Wissen Sie, ob ein Tool so konfiguriert werden kann, dass es einen solchen Unterschied nebeneinander anzeigt, möglicherweise in wenigen Spalten (wie im IntelliJ Merge-Konfliktlösungsfenster)? Ihre Antwort ist genau das, wonach ich gesucht habe

    – max

    24. Juni 2020 um 5:47 Uhr

  • @ Max Nein, leider nicht. Das Googeln von “n-way visual diff” liefert einige Links, also habe ich diese ausprobiert.

    – max630

    24. Juni 2020 um 6:24 Uhr

  • Dies zeigt Ihnen nicht nur Dateien in einem Commit, zumindest wenn es der zweite ist. Ich denke, dass die Lösung von @ hesham_EE richtig ist.

    – philipp2100

    13. August 2020 um 13:39 Uhr

1646244492 282 Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
Patthoyts

Ich denke, Sie brauchen nur ‘git show -c $ref’. Wenn Sie dies im Git-Repository auf a8e4a59 versuchen, wird ein kombiniertes Diff angezeigt (Plus-/Minuszeichen in einer von 2 Spalten). Wie das git-show-Handbuch erwähnt, delegiert es ziemlich genau an ‘git diff-tree’, sodass diese Optionen nützlich aussehen.

  • Wissen Sie, ob ein Tool so konfiguriert werden kann, dass es einen solchen Unterschied nebeneinander anzeigt, möglicherweise in wenigen Spalten (wie im IntelliJ Merge-Konfliktlösungsfenster)? Ihre Antwort ist genau das, wonach ich gesucht habe

    – max

    24. Juni 2020 um 5:47 Uhr

  • @ Max Nein, leider nicht. Das Googeln von “n-way visual diff” liefert einige Links, also habe ich diese ausprobiert.

    – max630

    24. Juni 2020 um 6:24 Uhr

  • Dies zeigt Ihnen nicht nur Dateien in einem Commit, zumindest wenn es der zweite ist. Ich denke, dass die Lösung von @ hesham_EE richtig ist.

    – philipp2100

    13. August 2020 um 13:39 Uhr

Wie kann man einen Merge Commit mit kombinierter Diff Ausgabe git zeigen
hesham_EE

Wenn Ihr Merge-Commit wie oben beschrieben Commit 0e1329e5 ist, können Sie das Diff, das in diesem Merge enthalten war, folgendermaßen abrufen:

git diff 0e1329e5^..0e1329e5

Ich hoffe das hilft!

914740cookie-checkWie kann man einen Merge-Commit mit kombinierter Diff-Ausgabe “git zeigen”, selbst wenn jede geänderte Datei mit einem der Eltern übereinstimmt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy