Ich habe das Falsche in eine Commit-Nachricht geschrieben.
Wie kann ich die Nachricht ändern? Das Commit wurde noch nicht gepusht.
Laurie Jung
Ich habe das Falsche in eine Commit-Nachricht geschrieben.
Wie kann ich die Nachricht ändern? Das Commit wurde noch nicht gepusht.
git commit --amend
öffnet Ihren Editor, in dem Sie die Commit-Nachricht des letzten Commit ändern können. Zusätzlich können Sie die Commit-Nachricht direkt in der Befehlszeile setzen mit:
git commit --amend -m "New commit message"
…das kann jedoch dazu führen, dass mehrzeilige Commit-Meldungen oder kleine Korrekturen umständlicher einzugeben sind.
Stellen Sie sicher, dass Sie keine Änderungen an der Arbeitskopie vorgenommen haben inszeniert bevor Sie dies tun, oder sie werden sich auch verpflichten. (Uninszeniert Änderungen werden nicht übernommen.)
Wenn Sie Ihr Commit bereits in Ihren Remote-Zweig hochgeschoben haben, müssen Sie – nachdem Sie Ihr Commit lokal geändert haben (wie oben beschrieben) – auch das Pushen des Commit erzwingen mit:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Warnung: Force-Pushing überschreibt den Remote-Zweig mit dem Status Ihres lokalen Zweigs. Wenn es im Remote-Zweig Commits gibt, die Sie nicht in Ihrem lokalen Zweig haben, müssen Sie Wille diese Commits verlieren.
Warnung: Seien Sie vorsichtig, wenn Sie Commits ändern, die Sie bereits mit anderen Personen geteilt haben. Änderungen von Verpflichtungen im Wesentlichen schreibt um sie anders haben SCHA IDs, was ein Problem darstellt, wenn andere Leute Kopien des alten Commits haben, die Sie umgeschrieben haben. Jeder, der eine Kopie des alten Commits hat, muss seine Arbeit mit Ihrem neu geschriebenen Commit synchronisieren, was manchmal schwierig sein kann. Stellen Sie also sicher, dass Sie sich mit anderen abstimmen, wenn Sie versuchen, den Verlauf des gemeinsamen Commits neu zu schreiben, oder vermeiden Sie es einfach, gemeinsame Commits neu zu schreiben insgesamt.
Eine weitere Option ist die Verwendung eines interaktiven Rebase. Auf diese Weise können Sie jede Nachricht bearbeiten, die Sie aktualisieren möchten, auch wenn es nicht die neueste Nachricht ist.
Gehen Sie folgendermaßen vor, um einen Git-Squash durchzuführen:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Sobald Sie Ihre Commits gequetscht haben, wählen Sie die e/r
zum Bearbeiten der Nachricht:
Wenn Sie verwenden git rebase -i HEAD~n
Es kann geben mehr als n Commits. Git „sammelt“ alle Commits in den letzten n Commits, und wenn es irgendwo zwischen diesem Bereich eine Zusammenführung gab, sehen Sie auch alle Commits, sodass das Ergebnis n + ist.
Wenn Sie dies für mehr als einen einzelnen Zweig tun müssen und beim Ändern des Inhalts möglicherweise Konflikte auftreten, richten Sie ein git rerere
und lassen Sie Git diese Konflikte automatisch für Sie lösen.
aber git commit --amend
ist nicht so mächtig wie git rebase -i
.
– Jeffrey José
5. Juli 2010 um 8:40 Uhr
@jeffjose, das muss es definitiv nicht sein. Ebenfalls, git commit --amend
kann den (einen?) Master-Commit reparieren.
– Nachzügler
14. Juli 2010 um 6:02 Uhr
Wenn Sie bereits gedrückt haben, erzwingen Sie einfach erneutes Drücken: git push -f origin branchname
– Huss
2. Mai 2012 um 14:12 Uhr
@hughes ist es nicht git push -f
ein bisschen gefährlich, wenn andere Leute dasselbe Repository verwenden?
– Armand
8. November 2012 um 7:48 Uhr
Wenn Sie nicht die gesamte Commit-Nachricht neu schreiben möchten, gehen Sie zu git commit --amend -c HEAD
. Dadurch wird der Editor geöffnet, der mit Ihrer alten Commit-Nachricht vorbelegt ist, sodass Sie ihn ändern können.
– Sam
14. November 2012 um 15:38 Uhr
lfx_cool
git commit --amend -m "your new message"
Ich habe git commit –amend -m “New message” ausgeführt, aber das Pushen auf Github hat das “Merge the remote changes before pushing before pushing” generiert. Nach Pull, Commit –amend und erneutem Push wird die neue Nachricht nicht angezeigt. Stattdessen habe ich “Merge branch ‘master’ of github.com:[myrepo]”
– Dave Everitt
14. Oktober 2011 um 16:58 Uhr
@DaveEveritt Sie haben Ihr Commit höchstwahrscheinlich in den Upstream verschoben, bevor Sie versucht haben, es zu beheben.
– Thorbjørn Ravn Andersen
25. April 2013 um 8:21 Uhr
@Kyralessa stimmt nicht. In bash können Sie ganz einfach mehrzeilige Commit-Nachrichten verfassen, indem Sie das Zitat einfach nicht schließen, bis Sie fertig sind (drücken Sie die Eingabetaste am Ende jeder Zeile innerhalb der Anführungszeichen).
– Kochfelder
11. Juni 2013 um 21:11 Uhr
Ich verstehe nicht, wie eine Antwort, die nur der Hauptidee einer Antwort ähnelt, die vor zwei Jahren geschrieben wurde, und auch die akzeptierte Antwort so viele Stimmen erhält. Seltsam. (nichts falsch mit der Antwort aber)
– glücklicher Programmierer
15. Januar 2014 um 5:30 Uhr
@AmalMurali, gut. Mir ging es nicht so sehr um die Beliebtheit der Frage oder den Nutzen der Antwort. Aber diese spezielle Antwort ist nicht die älteste Antwort und bietet auch keinen weiteren Einblick in die akzeptierte Antwort. Es scheint eine Kopie eines Abschnitts der akzeptierten Antwort zu sein. Das war mein Punkt. PROST!
– glücklicher Programmierer
21. Mai 2014 um 20:16 Uhr
Aristoteles Pagaltzis
Wenn der Commit, den Sie reparieren möchten, nicht der neueste ist:
git rebase --interactive $parent_of_flawed_commit
Wenn Sie mehrere fehlerhafte Commits reparieren möchten, übergeben Sie das übergeordnete Element des ältesten von ihnen.
Es erscheint ein Editor mit einer Liste aller Commits seit dem von Ihnen gegebenen.
pick
zu reword
(oder auf alten Versionen von Git, to edit
) vor allen Commits, die Sie reparieren möchten.Für jedes gewünschte Commit umformulieren, Git bringt Sie zurück in Ihren Editor. Für jedes gewünschte Commit bearbeiten, Git lässt Sie in die Shell fallen. Wenn Sie in der Shell sind:
git commit --amend
git rebase --continue
Der größte Teil dieser Sequenz wird Ihnen durch die Ausgabe der verschiedenen Befehle erklärt, während Sie gehen. Es ist sehr leicht; Sie müssen es sich nicht merken – merken Sie sich das einfach git rebase --interactive
lässt Sie Commits korrigieren, egal wie lange sie zurückliegen.
Beachten Sie, dass Sie Commits, die Sie bereits gepusht haben, nicht ändern möchten. Oder vielleicht tun Sie das, aber in diesem Fall müssen Sie sehr darauf achten, mit allen zu kommunizieren, die möglicherweise Ihre Commits gezogen und daran gearbeitet haben. Wie kann ich wiederherstellen/neu synchronisieren, nachdem jemand eine Rebase oder ein Zurücksetzen auf einen veröffentlichten Zweig gepusht hat?
Kann man die Nachricht des ersten Commits ändern (der keinen Elternteil hat)?
– 13 Ren
21. Januar 2010 um 19:57 Uhr
Dies wird in einer der anderen Antworten erwähnt, aber ich werde es hier vermerken. Seit git 1.6.6 können Sie verwenden reword
anstelle von pick
um die Protokollnachricht zu bearbeiten.
– MitMaro
31. Mai 2010 um 13:27 Uhr
Übrigens, $parent_of_flawed_commit
ist äquivalent zu $flawed_commit^
.
– Peeja
28. November 2010 um 23:26 Uhr
Tun Sie dies NIEMALS (oder rebasen Sie im Allgemeinen), wenn Sie bereits Upstream gepusht haben!
– Daniel Spüler
31. Mai 2011 um 19:14 Uhr
Verwenden -p
(--preserve-merges
), wenn es nach dem fehlerhaften Commit eine Zusammenführung gab.
– ahven
31. Januar 2012 um 14:37 Uhr
Fatih Acet
Um den vorherigen Commit zu ändern, nehmen Sie die gewünschten Änderungen vor, stellen Sie diese Änderungen bereit und führen Sie sie dann aus
git commit --amend
Dadurch wird eine Datei in Ihrem Texteditor geöffnet, die Ihre neue Commit-Nachricht darstellt. Es beginnt mit dem Text aus Ihrer alten Commit-Nachricht. Ändern Sie die Commit-Nachricht wie gewünscht, speichern Sie dann die Datei und beenden Sie Ihren Editor, um den Vorgang abzuschließen.
Um den vorherigen Commit zu ändern und dieselbe Protokollnachricht beizubehalten, führen Sie
git commit --amend -C HEAD
Um den vorherigen Commit zu reparieren, indem Sie ihn vollständig entfernen, führen Sie ihn aus
git reset --hard HEAD^
Wenn Sie mehr als eine Commit-Nachricht bearbeiten möchten, führen Sie
git rebase -i HEAD~commit_count
(Ersetzen commit_count mit der Anzahl der Commits, die Sie bearbeiten möchten.) Dieser Befehl startet Ihren Editor. Markieren Sie den ersten Commit (den Sie ändern möchten) als „edit“ statt „pick“, dann speichern und beenden Sie Ihren Editor. Nehmen Sie die Änderung vor, die Sie festschreiben möchten, und führen Sie sie dann aus
git commit --amend
git rebase --continue
Hinweis: Sie können auch in dem von geöffneten Editor “die gewünschte Änderung vornehmen”. git commit --amend
John
Wie bereits erwähnt, git commit --amend
ist die Möglichkeit, den letzten Commit zu überschreiben. Eine Anmerkung: Wenn Sie möchten, auch die Dateien überschreibenwäre der Befehl
git commit -a --amend -m "My new commit message"
Und wenn Sie nicht alles hinzufügen möchten, können Sie dies zuerst tun git add file.ext
dann einfach git commit --amend
– MalcolmOcean
22. September 2015 um 5:56 Uhr
Peter Mortensen
Sie können auch verwenden git filter-branch
dafür.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
Es ist nicht so einfach wie trivial git commit --amend
aber es ist besonders nützlich, wenn Sie nach Ihrer fehlerhaften Commit-Nachricht bereits einige Merges haben.
Beachten Sie, dass dies versuchen wird, umzuschreiben jeden zwischen sich verpflichten HEAD
und den fehlerhaften Commit, also sollten Sie Ihren auswählen msg-filter
Befehl sehr weise 😉
Und wenn Sie nicht alles hinzufügen möchten, können Sie dies zuerst tun git add file.ext
dann einfach git commit --amend
– MalcolmOcean
22. September 2015 um 5:56 Uhr
Peter Mortensen
Ich bevorzuge diesen Weg:
git commit --amend -c <commit ID>
Andernfalls gibt es einen neuen Commit mit einer neuen Commit-ID.
Für mich erstellt die Verwendung Ihres obigen Befehls tatsächlich einen neuen Commit mit einer neuen Commit-ID plus einem zusätzlichen Commit mit der Aufschrift „Merge Branch“ als Standard-Commit-Nachricht.
– Jan
29. März 2013 um 16:27 Uhr
Änderung immer erstellt einen neuen Commit mit einer neuen Commit-ID. Die Commit-ID ist der SHA-Hash des Inhalts des Commit, einschließlich der Commit-Nachricht und der erstellten/festgeschriebenen Zeitstempel. Dies ist eine Funktion von Git, die abgesehen von Hash-Kollisionen sicherstellt, dass zwei Commits mit derselben ID genau dasselbe Commit sind, mit genau demselben Inhalt, Verlauf und so weiter.
– Emil Lundberg
19. Juni 2013 um 9:30 Uhr
Stimme Emil zu. Wenn Sie die Dokumentation lesen, scheint es, dass alles, was “-c” tut, Git mitteilt, welche Nachricht des Commit als Standard/Vorlage für Ihr neues Commit verwendet werden soll. Tatsächlich wird es bereits standardmäßig “-c
– Gal
29. September 2013 um 19:12 Uhr
Die -c
macht ein paar Sachen. Es verwendet standardmäßig die alte Nachricht, kopiert aber auch Informationen zur Urheberschaft (Person und Zeit). -C
macht dasselbe, außer dass es Sie nicht auffordert, die Nachricht zu bearbeiten.
– Joseph K. Strauss
28. Dezember 2014 um 2:55 Uhr
Wie bei @SantanuDey hat es bei mir nicht funktioniert. ich habe fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
– Andreas Grimm
14. April 2015 um 5:22 Uhr
Für diejenigen, die etwas neu sind: Lauries Hinweis, noch nicht gepusht zu haben, ist wichtig. Wie bei der Umbasierung ändert dies die Geschichte. Wenn jemand zwischen dem ursprünglichen und dem umgeschriebenen Verlauf geklont/aus Ihrem Repo gezogen hat, kann er nach dem Umschreiben (für diesen Zweig) nicht mehr ziehen.
– Pat Notz
10. Oktober 2008 um 20:12 Uhr