Wie bearbeite oder formuliere ich die Nachricht eines Zusammenführungs-Commits neu?
git commit --amend
funktioniert, wenn es das letzte Commit ist ( HEAD
), aber was ist, wenn es vorher kommt HEAD
?
git rebase -i HEAD~5
listet die Zusammenführungs-Commits nicht auf.
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to
HEAD~5
ist das übergeordnete Element des Commits, das Sie ändern möchten (normalerweise sha1 ^)?--preserve-merges
ist jetzt--rebase-merges
Beachten Sie, dass beim Starten von git1.7.9.6 (und git1.7.10 +)
git merge
selbst immer der Editor ausgelöst wird , damit Sie einer Zusammenführung Details hinzufügen können.Außerdem wird eine Umgebungsvariable eingeführt,
GIT_MERGE_AUTOEDIT
mit der ältere Skripte dieses Verhalten ablehnen können.Siehe " Git 1.7.10 antizipieren ":
Linus sagte:
Beachten Sie, dass vor Git 2.17 (Q2 2018) "
git rebase -p
" Protokollnachrichten eines Zusammenführungs-Commits entstellt wurden, das jetzt behoben ist.Siehe Commit ed5144d (08. Februar 2018) von Gregory Herrero (``) .
Vorgeschlagen von: Vegard Nossum (
vegard
) und Quentin Casasnovas (casasnovas
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 8b49408 , 27. Februar 2018)Mit Git 2.23 (Q2 2019) sollte eine
merge -c
Anweisung " " während "git rebase --rebase-merges
" dem Benutzer die Möglichkeit geben, die Protokollnachricht zu bearbeiten, auch wenn ansonsten keine neue Zusammenführung erstellt und die vorhandene ersetzt werden muss (dh stattdessen ein schneller Vorlauf) ), aber nicht.Welches wurde korrigiert.
Siehe Commit 6df8df0 (02. Mai 2019) von Phillip Wood (
phillipwood
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit c510261 , 13. Juni 2019)quelle
Eine weitere nette Antwort, die nur primitive Befehle verwendet - von knittl https://stackoverflow.com/a/7599522/94687 :
oder ein besserer (korrekterer) endgültiger Rebase-Befehl:
Übrigens könnte die Verwendung der primitiven Befehle die nette "Funktion" haben, nicht zu viel CPU zu verbrauchen und Sie unbekannte Zeit warten zu lassen, bis Git mit dem Nachdenken über die Liste der Commits fertig ist, die im Fall von neu basiert werden müssen
git rebase -p -i HEAD^^^^
(ein solcher Befehl, der dazu führen würde) Eine Liste von nur 4 letzten Commits mit der Zusammenführung als letzte in meinem Fall in meinem Fall dauerte ungefähr 50 Sekunden!).quelle
git merge --edit
Ermöglicht es Ihnen, den Kommentar auch bei nicht interaktiver Zusammenführung abzugeben.
git merge --edit --no-ff
Dies kann nützlich sein, wenn Sie dem Git-Flow folgen, indem Sie den Entwicklungszweig neu gründen und ohne schnellen Vorlauf in ihn einbinden.quelle
Für aktuelle Git-Versionen (Mai 2020):
git rebase -i -r <parent>
,dann im Editor
merge -C ...
durch ersetzenmerge -c ...
.Dadurch wird die Festschreibungsnachricht während der erneuten Basierung im Editor geöffnet, wo Sie sie ändern können.
(Danke an VonC für den Hinweis .)
quelle
Der
git rebase -i HEAD~5
Befehl öffnet den Editor. Es listet die angegebenen Commits auf (in diesem Fall fünf davon). Die erste Spalte enthältpick
für jedes Commit. Ersetzen Sie einfachpick
mitreword
in diesem Editor und speichern + schließen Sie den Editor. Dann öffnet git den Editor für jedes Commit, zu dem Sie gewechselt habenpick
,reword
und lässt Sie die Commit-Nachricht bearbeiten.quelle
-p
demgit rebase
Befehl auch etwas hinzufügen .