7648 Stimmen

Wie können bestehende, aber noch nicht gepushte Commit-Nachrichten geändert werden?

Ich habe im Commit-Nachricht das falsche geschrieben.

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

868 Stimmen

Für diejenigen, die noch neu in Git sind: Lauries Hinweis darauf, dass noch nicht gepusht wurde, ist wichtig. Wie beim Rebasieren ändert sich dadurch die Historie. Wenn jemand zwischen der originalen und der umgeschriebenen Historie von deinem Repository geklont/gezogen hat, wird er nach der Änderung nicht mehr in der Lage sein, zu ziehen (für diesen Branch).

18573voto

EfForEffort Punkte 55686

Ändern der letzten Commit-Nachricht

git commit --amend

öffnet Ihren Editor und ermöglicht es Ihnen, die Commit-Nachricht des zuletzt erfolgten Commits zu ändern. Alternativ können Sie die Commit-Nachricht direkt in der Befehlszeile festlegen mit:

git commit --amend -m "Neue Commit-Nachricht"

... dies kann jedoch die Eingabe von mehrzeiligen Commit-Nachrichten oder kleinen Korrekturen erschweren.

Stellen Sie sicher, dass Sie keine Änderungen in der Arbeitskopie bereitgestellt haben, bevor Sie dies tun, da sie sonst ebenfalls committed werden. (Änderungen, die nicht bereitgestellt wurden, werden nicht committed.)

Ändern der Nachricht eines Commits, den Sie bereits in Ihren Remote-Zweig gepusht haben

Wenn Sie Ihren Commit bereits in Ihren Remote-Zweig gepusht haben, dann - nachdem Sie Ihren Commit lokal geändert haben (wie oben beschrieben) - müssen Sie auch den Commit mit Force-Push übertragen mit:

git push   --force
# Oder
git push   -f

Warnung: Force-Pushing überschreibt den Remote-Zweig mit dem Stand Ihres lokalen Zweigs. Wenn es Commits auf dem Remote-Zweig gibt, die Sie nicht auf Ihrem lokalen Zweig haben, werden Sie diese Commits verlieren.

Warnung: Seien Sie vorsichtig beim Ändern von Commits, die Sie bereits mit anderen Personen geteilt haben. Das Ändern von Commits schreibt sie im Grunde um, um unterschiedliche SHA-IDs zu haben, was ein Problem darstellt, wenn andere Personen Kopien des alten Commits haben, den Sie umgeschrieben haben. Jeder, der eine Kopie des alten Commits hat, muss ihre Arbeit mit Ihrem neu umgeschriebenen Commit synchronisieren, was manchmal schwierig sein kann, also stellen Sie sicher, dass Sie sich mit anderen abstimmen, wenn Sie versuchen, gemeinsam genutzte Commit-Historie umzuschreiben, oder vermeiden Sie es einfach, gemeinsam genutzte Commits überhaupt umzuschreiben.


Führen Sie ein interaktives Rebase durch

Eine andere Möglichkeit ist die Verwendung von interaktivem Rebase. Dies ermöglicht es Ihnen, jede Nachricht zu bearbeiten, die Sie aktualisieren möchten, auch wenn es nicht die neueste Nachricht ist.

Um einen Git-Squash durchzuführen, befolgen Sie diese Schritte:

// n ist die Anzahl der Commits bis zum letzten Commit, den Sie bearbeiten möchten
git rebase -i HEAD~n

Nachdem Sie Ihre Commits gesquashed haben - wählen Sie die e/r Option für die Bearbeitung der Nachricht:

Screenshot des Terminals beim Bearbeiten eines Commits

Wichtiger Hinweis zum interaktiven Rebase

Wenn Sie git rebase -i HEAD~n verwenden, können es mehr als n Commits sein. Git wird alle Commits in den letzten n Commits "sammeln", und wenn es irgendwo in diesem Bereich eine Zusammenführung gab, werden Sie auch alle Commits sehen, so dass das Ergebnis n + sein wird.

Guter Tipp:

Wenn Sie dies für mehr als einen einzelnen Zweig tun müssen und Konflikte auftreten könnten, wenn Sie den Inhalt ändern, richten Sie git rerere ein und lassen Sie Git diese Konflikte automatisch für Sie lösen.


Dokumentation

276 Stimmen

Jedoch ist git commit --amend nicht so leistungsfähig wie git rebase -i.

82 Stimmen

@jeffjose, Es muss definitiv nicht sein. Außerdem kann git commit --amend das Master-Commit ändern.

125 Stimmen

Wenn Sie bereits gepusht haben, führen Sie einfach erneut einen Force-Push durch: git push -f origin branchname

2668voto

lfx_cool Punkte 26165
git commit --amend -m "deine neue Nachricht"

9 Stimmen

Ich habe `git commit --amend -m "New message"` gemacht, aber beim Pushen auf Github wurde "Merge the remote changes before pushing again" generiert. Nach einem Pull, Commit --amend und erneutem Pushen erscheint die neue Nachricht nicht. Stattdessen habe ich "Merge branch 'master' of github.com:[meinerepo]".

8 Stimmen

@DaveEveritt Du hast wahrscheinlich deinen Commit bereits nach oben geschoben, bevor du versucht hast, es zu beheben.

1 Stimmen

@ThorbjørnRavnAndersen - Vielen Dank, das war vor 2 Jahren, heute habe ich meinen Git-Workflow sortiert!

2499voto

Aristotle Pagaltzis Punkte 106298

Wenn das Commit, das Sie beheben möchten, nicht das neueste ist:

  1. git rebase --interactive $parent_of_flawed_commit

    Wenn Sie mehrere fehlerhafte Commits beheben möchten, übergeben Sie das Elternteil des ältesten Commit.

  2. Ein Editor wird geöffnet, mit einer Liste aller Commits seit dem von Ihnen angegebenen Commit.

    1. Ändern Sie pick in reword (oder in älteren Versionen von Git in edit) vor den Commits, die Sie beheben möchten.
    2. Sobald Sie gespeichert haben, wird Git die aufgelisteten Commits neu abspielen.
  3. Für jeden Commit, den Sie umformulieren möchten, gelangen Sie zurück in Ihren Editor. Für jeden Commit, den Sie bearbeiten möchten, bringt Sie Git in die Shell. Wenn Sie in der Shell sind:

    1. Ändern Sie den Commit auf beliebige Weise.
    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 fortfahren. Es ist sehr einfach; Sie müssen es nicht auswendig lernen - denken Sie einfach daran, dass git rebase --interactive es Ihnen ermöglicht, Commits zu korrigieren, unabhängig davon, wie lange sie zurückliegen.


Beachten Sie, dass Sie Commits, die Sie bereits gepusht haben, nicht ändern möchten. Oder vielleicht doch, aber in diesem Fall müssen Sie sehr sorgfältig mit allen kommunizieren, die Ihre Commits gezogen und weitergearbeitet haben. Wie kann ich mich wiederherstellen/synchronisieren, nachdem jemand einen Rebase oder ein Reset auf einem veröffentlichten Branch gepusht hat?

46 Stimmen

Kann man die Nachricht des ersten Commits ändern (der keinen Eltern-Commit hat)?

28 Stimmen

Dies wird in einer der anderen Antworten erwähnt, aber ich werde hier eine Notiz dazu machen. Seit git 1.6.6 können Sie reword anstelle von pick verwenden, um die Protokollnachricht zu bearbeiten.

92 Stimmen

Übrigens ist $parent_of_flawed_commit äquivalent zu $flawed_commit^.

825voto

Fatih Acet Punkte 27007

Um den vorherigen Commit zu korrigieren, machen Sie die gewünschten Änderungen und erfassen Sie diese Änderungen, und führen Sie dann aus

git commit --amend

Dies öffnet eine Datei in Ihrem Texteditor, die Ihre neue Commit-Nachricht darstellt. Es wird zuerst mit dem Text aus Ihrer alten Commit-Nachricht gefüllt. Ändern Sie die Commit-Nachricht wie gewünscht, speichern Sie die Datei und beenden Sie Ihren Editor, um abzuschließen.

Um den vorherigen Commit zu korrigieren und dieselbe Protokollnachricht beizubehalten, führen Sie aus

git commit --amend -C HEAD

Um den vorherigen Commit zu korrigieren, indem Sie ihn vollständig entfernen, führen Sie aus

git reset --hard HEAD^

Wenn Sie mehr als eine Commit-Nachricht bearbeiten möchten, führen Sie aus

git rebase -i HEAD~commit_count

(Ersetzen Sie commit_count durch die 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", speichern und beenden Sie dann Ihren Editor. Machen Sie die gewünschte Änderung am Commit und führen Sie dann aus

git commit --amend
git rebase --continue

Hinweis: Sie können auch "Die gewünschte Änderung vornehmen" aus dem Editor öffnen, der von git commit --amend geöffnet wurde

23 Stimmen

git rebase -i HEAD~commit_count ermöglicht es Ihnen auch, die Commit-Nachrichten beliebig vieler ausgewählter Commits zu ändern. Markieren Sie einfach die ausgewählten Commits als "reword" statt "pick".

4 Stimmen

Was, wenn du nicht neu basieren möchtest? Möchtest du nur eine ältere Nachricht ändern?

4 Stimmen

git reset --hard vernichtet nicht festgelegte Änderungen. Bitte ersetzen Sie --hard durch --soft.

411voto

John Punkte 4284

Wie bereits erwähnt, ist git commit --amend der Weg, um den letzten Commit zu überschreiben. Ein Hinweis: Wenn Sie auch die Dateien überschreiben möchten, lautet der Befehl

git commit -a --amend -m "Meine neue Commit-Nachricht"

5 Stimmen

Und wenn Sie nicht alles hinzufügen möchten, können Sie zuerst git add file.ext ausführen und dann einfach git commit --amend

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X