Als Git-Benutzer stoße ich regelmäßig auf die Situation, dass ich einen oder mehrere Commits auf eine Weise überarbeiten muss, die nicht in --amend
oder rebase -i
mit Fixup-Commits passt. Normalerweise würde ich so etwas machen
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Ich nehme vernünftig komponierte Commit-Nachrichten sehr ernst. Sie enthalten normalerweise größeren Text mit Verweisen und Begründungen für die Änderung. Bis jetzt bin ich verärgert ganz auf dem langwierigen Prozess meine alten Commit - Nachricht über einen unsortierten zu erholen git reflog
, git log
und kopiert und Prozess einfügen.
Gibt es eine bessere Möglichkeit, dies in Angriff zu nehmen? Und wie wäre es, wenn mein Commit mehr als ein Commit umfasst?
Bearbeiten: Nachdem ich ein wenig darüber nachgedacht habe, denke ich, dass ich nach einer Git-Stash- ähnlichen Funktionalität für Commit-Nachrichten suche, bei denen das Fixieren / Ändern von Commits nicht angemessen ist.
quelle
git reset head~1
, wäre Ihre alte Commit-Nachricht nicht nur der zweite Eintrag in derreflog
?gitk
offen haben. Auf diese Weise müssen Sie nicht einmal das Reflog verwenden. Alternativ könnenrev-parse <branch>
Sie Ihren Hash vor dem Zurücksetzen abrufen und die Antwort von ibizaman verwenden.Antworten:
Nach a
git reset
kann dieser Einzeiler es tun:oder noch kürzer:
Sie können die anderen von @ user2718704 angegebenen Optionen verwenden .
quelle
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
es am klarsten.Wenn Sie den Befehl "git commit" ausführen, müssen Sie die folgenden Optionen überprüfen:
Wiederverwenden,
Bei Wiederverwendung bearbeiten,
Um den Autor zu ändern,
quelle
Warum zurückgesetzt , wenn Sie hacken, fix, hacken und dann einfach laufen
git commit --amend --no-edit
; So bleibt Ihre ursprüngliche Festschreibungsnachricht erhalten.Damit es für mehrere Commits funktioniert, erstellen Sie einfach ein temporäres Commit mit Ihren neuesten Änderungen und verwenden Sie dann eine interaktive Rebase, um das vorherige Commit (das die gute Commit-Nachricht enthält) mit dem neuen temporären Commit zu quetschen, wobei die Commit-Nachricht des alten Commits beibehalten wird.
quelle
fixup
Anweisung deklarieren, dass das spätere Commit das vorherige Commit reparieren soll, und es wird automatisch die Commit-Nachricht aus dem Original verwendet, wobei die Nachricht aus dem Fixup-Commit verworfen wird.rebase -i
. Ich habe es in diesem Zusammenhang nie benutzt. Für die verbleibenden Fälle wie das erneute Zusammenführen ist die andere Antwort besser für meine Frage geeignet, daher habe ich diese als Antwort markiert.Sie können in Betracht ziehen
git commit --reset-author -c <commit>
, die Festschreibungsnachricht mit der Bearbeitung und der aktuellen Uhrzeit wiederzuverwenden.quelle