Wie kann ich ein Commit ändern, ohne die Commit-Nachricht zu ändern (die vorherige wiederverwenden)?

656

Gibt es eine Möglichkeit, ein Commit zu ändern, ohne dass vi(oder Ihr $EDITOR) die Option zum Ändern Ihrer Commit-Nachricht angezeigt wird, sondern einfach die vorherige Nachricht wiederverwendet wird?

Sridhar Sarnobat
quelle
5
Ich würde meine eigene Frage ablehnen, nachdem ich auf die harte Tour die Übel der Änderung gelernt hatte.
Sridhar Sarnobat
28
Solange Sie sich an bestimmte Regeln halten (z. B. etwas nicht ändern, das bereits vorangetrieben wurde), gibt es keinen Grund, warum das Ändern eine schlechte Sache sein muss.
Paullb
3
Das Ändern von Commits sollte nicht für das intermittierende Festschreiben von Arbeiten während einer einzelnen logischen Änderung verwendet werden. Für , dass Sie vor Ort richtig begehen sollen und dann zerquetschen die commit Geschichte einmal fertig (@ Sridhar-Sarnobat)
DBCerigo
3
Ich stimme @DBCerigo voll und ganz zu. Die einzige Situation, die ich für nützlich halte, ist, wenn ich vergessen habe, eine Datei in einem vorherigen Commit bereitzustellen (z. B. weil sie neu ist und daher beim Ausführen von git commit -a nicht automatisch bereitgestellt wird) und sie rückwirkend festschreiben möchte.
Sridhar Sarnobat
1
Eine andere Änderung ist auch dann nützlich, wenn Sie die Gefahren einer Änderung des Verlaufs erkennen, wenn Sie mit Ihrer letzten Festschreibungsnachricht unzufrieden sind und sie umformulieren möchten, ohne sie neu definieren zu müssen.
Sridhar Sarnobat

Antworten:

1007

Seit der Version 1.7.9 von Git können Sie auch git commit --amend --no-editIhr Ergebnis abrufen .

Beachten Sie, dass dies keine Metadaten aus dem anderen Commit wie den Zeitstempel enthält, die für Sie möglicherweise wichtig sind oder nicht.

Shaggie
quelle
42
Sie können es auch einfacher machen, standardmäßig das Flag --no-edit zu verwenden, indem Sie einen Alias ​​hinzufügen: "adjust = commit -a --amend --no-edit"
Jherico
1
@ Herico Ich würde vorschlagen, -a zu entfernen. Bitte machen Sie atomare Commits, es ist viel einfacher zu überprüfen oder neu zu starten :)
frouo
120

git commit -C HEAD --amendwird tun was du willst. Die -COption übernimmt die Metadaten aus einem anderen Commit.

Andy Ross
quelle
15
Nur um Andys Antwort zu ergänzen. Wenn Sie dies häufig tun, können Sie mit einen Alias ​​dafür einrichten git config --global alias.amend 'commit --amend -C HEAD'. Sie können dann git amendals Verknüpfung verwenden.
Mikej
9
Komm schon Leute, sei nicht faul, aktualisiere Git und benutze den eingebauten Befehl, den Shaggle vorschlägt! Plus eine für -C Option.
Dimitris Baltas
4
Nicht nur Zeitstempel, sondern auch die Autoreninformationen!
user1338062
3
@RyanCastner In der Tat war der Kommentar, auf den Sie sich beziehen, aus dem Jahr 2013. Mit der Git-Version, die ich derzeit verwende --amend, wird das Autorendatum auch ohne andere Option beibehalten (aber das Festschreibungsdatum wird geändert). Als solches habe ich meinen alten Kommentar entfernt.
Ruben Verborgh
2
Tatsächlich ist diese Antwort auf andere Weise wertvoll, auch wenn sie nicht die akzeptierte Antwort ist. Im Gegensatz zur anderen Antwort müssen Sie nicht verwenden —amend. Sie können ein neues Commit erstellen, aber dieselbe Nachricht wie das vorherige Commit verwenden. Das mag nicht nützlich klingen, aber meine Commit-Nachricht ist standardmäßig, wenn ich nur meine Arbeit speichere, ohne mir eine nette Commit-Nachricht —message=“Work in progress (untested)”
ausdenken zu
67

Eine andere (dumme) Möglichkeit ist, git commit --amend <<< :wqwenn Sie vi (m) als haben $EDITOR.

Galva
quelle
39
Auch wenn dies für diesen Anwendungsfall nicht erforderlich ist, wusste ich nicht, dass Sie zu vim pfeifen können. Das eröffnet einige interessante Möglichkeiten. Toller Tipp.
Sridhar Sarnobat
6
... <<< ZZkönnte noch weniger tippen;)
Ruslan
6
..und noch weniger - ... <<< :x:)
skwisgaar
3
Ich finde es nicht albern. Es ist eine großartige Möglichkeit, den Workflow für jeden Befehl zu verbessern, der vi öffnet.
B Sieben
12
Dreifachwinkel. das ist neu.
Oligofren
16

Um die akzeptierte Antwort zu erweitern, können Sie auch Folgendes tun:

git commit --amend --no-edit -a

um die aktuell geänderten Dateien hinzuzufügen.

Rambatino
quelle
11

Verwenden der akzeptierten Antwort zum Erstellen eines Alias

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

dann kannst du tun

git oops

und es wird alles hinzufügen und mit der gleichen Nachricht ändern

oder

git oops -m "new message"

das Ersetzen der Nachricht zu ändern

aljgom
quelle