Ich habe im Commit-Nachricht das falsche geschrieben.
Wie kann ich die Nachricht ändern? Der Commit wurde noch nicht gepusht.
Ich habe im Commit-Nachricht das falsche geschrieben.
Wie kann ich die Nachricht ändern? Der Commit wurde noch nicht gepusht.
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.)
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.
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:
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.
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.
@jeffjose, Es muss definitiv nicht sein. Außerdem kann git commit --amend
das Master-Commit ändern.
Wenn Sie bereits gepusht haben, führen Sie einfach erneut einen Force-Push durch: git push -f origin branchname
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]".
@DaveEveritt Du hast wahrscheinlich deinen Commit bereits nach oben geschoben, bevor du versucht hast, es zu beheben.
@ThorbjørnRavnAndersen - Vielen Dank, das war vor 2 Jahren, heute habe ich meinen Git-Workflow sortiert!
Wenn das Commit, das Sie beheben möchten, nicht das neueste ist:
git rebase --interactive $parent_of_flawed_commit
Wenn Sie mehrere fehlerhafte Commits beheben möchten, übergeben Sie das Elternteil des ältesten Commit.
Ein Editor wird geöffnet, mit einer Liste aller Commits seit dem von Ihnen angegebenen Commit.
pick
in reword
(oder in älteren Versionen von Git in edit
) vor den Commits, die Sie beheben möchten.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:
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 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?
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.
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
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".
git reset --hard
vernichtet nicht festgelegte Änderungen. Bitte ersetzen Sie --hard
durch --soft
.
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.
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).