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.
Wenn Sie eine alte Commit-Nachricht über mehrere Branches ändern müssen (d. h. der Commit mit der fehlerhaften Nachricht ist in mehreren Branches vorhanden), möchten Sie möglicherweise verwenden:
git filter-branch -f --msg-filter \
'sed "s///g"' -- --all
Git erstellt ein temporäres Verzeichnis zum Neuschreiben und erstellt zusätzlich Sicherungen alter Verweise in refs/original/
.
-f
erzwingt die Ausführung der Operation. Dies ist erforderlich, wenn das temporäre Verzeichnis bereits vorhanden ist oder wenn bereits Verweise unter refs/original
gespeichert sind. Wenn das nicht der Fall ist, können Sie diese Flagge fallen lassen.
--
trennt filter-branch-Optionen von Revisions-Optionen.
--all
stellt sicher, dass alle Branches und Tags neu geschrieben werden.
Aufgrund des Backups Ihrer alten Verweise können Sie leicht zum Zustand vor Ausführung des Befehls zurückkehren.
Sagen wir, Sie möchten Ihren Master wiederherstellen und darauf im Branch old_master
zugreifen:
git checkout -b old_master refs/original/refs/heads/master
Diese Antwort bezieht sich nicht auf die Frage des Fragestellers, da es ihnen nur darum geht, einen Commit zu reparieren, den sie gerade erst gemacht haben. Ich benutze regelmäßig git commit --amend
, um Kommentare zu korrigieren oder Dateien hinzuzufügen, die ich vergessen habe zu git add
, aber immer nur *vor*dem Pushen mit git push
. Ich benutze auch git filter-branch
, wenn ich vollständig mit der Versionshistorie herumspielen möchte, aber der Fragesteller möchte das nicht, daher braucht diese Antwort eine große Warnung - bitte versucht das nicht zu Hause, Leute!!
Wenn es Ihr letzter Commit ist, ändern Sie einfach den Commit:
git commit --amend -o -m "Neue Commit-Nachricht"
(Verwenden Sie die -o
(--only
) Flagge, um sicherzustellen, dass Sie nur die Commit-Nachricht ändern)
Wenn es sich um einen vergrabenen Commit handelt, verwenden Sie das fantastische interaktive Rebase:
git rebase -i @~9 # Zeige die letzten 9 Commits in einem Texteditor
Finden Sie den Commit, den Sie möchten, ändern Sie pick
in r
(reword
) und speichern und schließen Sie die Datei. Fertig!
Miniatur-Vim-Tutorial (oder, wie man mit nur 8 Tastenschlägen neu basiert <code>3j</code><code>cw</code>r
Esc<code>ZZ</code>):
vimtutor
aus, wenn Sie Zeit habenWenn Sie viel Text bearbeiten, wechseln Sie zur Dvorak-Tastaturbelegung, lernen Sie das Blindschreiben und lernen Sie Vim. Ist der Aufwand es wert? Ja.
ProTip™: Haben Sie keine Angst, mit "gefährlichen" Befehlen zu experimentieren, die die Historie neu schreiben* — Git löscht Ihre Commits standardmäßig nicht für 90 Tage; Sie finden sie im Reflog:
$ git reset @~3 # Gehen Sie drei Commits zurück
$ git reflog
c4f708b HEAD@{0}: reset: Bewegung zu @~3
2c52489 HEAD@{1}: commit: weitere Änderungen
4a5246d HEAD@{2}: commit: wichtige Änderungen vornehmen
e8571e4 HEAD@{3}: commit: einige Änderungen vornehmen
... frühere Commits ...
$ git reset 2c52489
... und Sie sind wieder am Ausgangspunkt
* _Passen Sie jedoch auf Optionen wie --hard
und --force
* _Außerdem, ändern Sie die Historie nicht von Branches, an denen Sie zusammenarbeiten.__
Der vim-Teil ist völlig off-topic, und anstatt die Benutzer dazu zu ermutigen, Zeit damit zu verbringen, zu lernen, wie man einen geheimnisvollen Editor verwendet, warum nicht etwas mehr zum Thema beibringen, wie man den standardmäßigen Git-Editor so einrichtet, dass er benutzerfreundlich ist, wie z.B. nano
? Wir sprechen hier von trivialen Änderungen, die an einer Textdatei vorgenommen werden müssen, nicht von Hardcore-Coding, das einen Flächenkrieg über den "besten" Texteditor auslösen würde.
@DanDascalescu: Weil es schneller ist, Vim mithilfe der obigen Anweisungen zu lernen, als mehrere Rebasen mit nano durchzuführen. Der Grund, warum git einen Texteditor öffnet und nicht seine eigene Schnittstelle für das Rebasen bereitstellt, liegt darin, dass Vim existiert: Es ist leichtgewichtig, standardmäßig auf den meisten Systemen installiert und sehr einfach zu erlernen, um ein Rebase leicht durchführen zu können: z.B. ddjjpZZ
verschiebt ein Commit um 2 nach unten. Es gibt nichts Geheimnisvolles an grundlegendem Vim-Wissen; es dauert 10min, um mit Vim vertrauter zu werden als mit nano.
Verwenden
git commit --amend
Um es im Detail zu verstehen, ist ein ausgezeichneter Beitrag 4. Git-Geschichte umschreiben. Es spricht auch darüber, wann nicht git commit --amend
zu verwenden.
Gibt es einen guten Weg, um Commit-Nachrichten zu korrigieren, die bereits in einem öffentlichen Repository gepusht wurden? Bisher bin ich zu dem Schluss gekommen, dass meine Tippfehler und Denkfehler in den Commit-Nachrichten, sobald sie gepusht wurden, für immer bestehen bleiben müssen.
In einem Wort, NEIN! Es gibt keinen GUTEN Weg, etwas zurückzuziehen, was Sie veröffentlicht haben. Alle Rücknahmen sind in einem größeren oder kleineren Maße SCHLECHT. Sie müssen die Disziplin annehmen, in einem eigenen privaten Repository in einem Zweig zu arbeiten, mehrere einzureichen, während Sie etwas hinzufügen, ein wenig testen, ein wenig optimieren. Dann fügen Sie Ihren gesamten Zweig in einen einzelnen Commit zusammen, schreiben Sie eine neue Commit-Nachricht, die die Gesamtänderung beschreibt, KORREKTURLESEN Sie es und drücken Sie es.
Nur um auf das Offensichtliche hinzuweisen, dass man nicht bei jedem Zurückkehren von einem Feature-Zweig einen einzigen Commit machen muss. Was viele Leute tun, ist ein Rebase auf den Zielzweig (um die Dinge sauber aussehen zu lassen) und dann zusammenführen mit der Option, das Fast-Forwarding zu unterdrücken. Stimme dem Hauptpunkt zu, vorsichtig zu sein, bevor du allerdings pushst.
Hier haben Sie ein paar Optionen. Sie können Folgendes tun
git commit --amend
solange es Ihr letzter Commit ist.
Ansonsten, wenn es nicht Ihr letzter Commit ist, können Sie ein interaktives Rebase durchführen,
git rebase -i [verzweigt_von] [Hash vor dem Commit]
Dann fügen Sie einfach im interaktiven Rebase edit zu diesem Commit hinzu. Wenn es erscheint, führen Sie ein git commit --amend
durch und ändern Sie die Commit-Nachricht. Wenn Sie vor diesem Commit-Punkt zurückrollen möchten, könnten Sie auch git reflog
verwenden und einfach diesen Commit löschen. Dann führen Sie einfach erneut ein git commit
durch.
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).