Wie ändere ich bestehende, ungepushte Commit-Nachrichten?

Lesezeit: 9 Minuten

Wie andere ich bestehende ungepushte Commit Nachrichten
Laurie Jung

Ich habe das Falsche in eine Commit-Nachricht geschrieben.

Wie kann ich die Nachricht ändern? Das Commit wurde noch nicht gepusht.

  • 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

Änderung der letzten Commit-Nachricht

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.)

Ändern der Nachricht eines Commit, das Sie bereits an Ihren Remote-Zweig gepusht haben

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.


Führen Sie eine interaktive Rebase durch

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:

Screenshot des Terminals während der Commit-Bearbeitung

Wichtiger Hinweis zum interaktiven Rebase

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.

Guter Tipp:

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.


Dokumentation

  • 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

1646897893 789 Wie andere ich bestehende ungepushte Commit Nachrichten
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

1646897893 890 Wie andere ich bestehende ungepushte Commit Nachrichten
Aristoteles Pagaltzis

Wenn der Commit, den Sie reparieren möchten, nicht der neueste ist:

  1. git rebase --interactive $parent_of_flawed_commit

    Wenn Sie mehrere fehlerhafte Commits reparieren möchten, übergeben Sie das übergeordnete Element des ältesten von ihnen.

  2. Es erscheint ein Editor mit einer Liste aller Commits seit dem von Ihnen gegebenen.

    1. Ändern pick zu reword (oder auf alten Versionen von Git, to edit) vor allen Commits, die Sie reparieren möchten.
    2. Nach dem Speichern gibt Git die aufgelisteten Commits wieder.
  3. 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:

    1. Ändern Sie das Commit nach Belieben.
    2. git commit --amend
    3. 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


Wie andere ich bestehende ungepushte Commit Nachrichten
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

1646897894 464 Wie andere ich bestehende ungepushte Commit Nachrichten
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


1646897894 950 Wie andere ich bestehende ungepushte Commit Nachrichten
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 --amendaber 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


1646897894 950 Wie andere ich bestehende ungepushte Commit Nachrichten
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 ” ausführen , muss also nicht angegeben werden.

    – 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

986900cookie-checkWie ändere ich bestehende, ungepushte Commit-Nachrichten?

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

Privacy policy