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.
Ich benutze so oft wie möglich das Git GUI, und das gibt Ihnen die Möglichkeit, den letzten Commit zu ändern:
Außerdem ist git rebase -i origin/master
ein schönes Mantra, das Ihnen immer die Commits anzeigt, die Sie oben auf dem Master gemacht haben, und Ihnen die Möglichkeit gibt, zu ändern, zu löschen, umzusortieren oder zusammenzufassen. Kein Hash muss zuerst abgerufen werden.
Für alle, die nach einer Windows/Mac GUI suchen, um beim Bearbeiten älterer Nachrichten zu helfen (d. h. nicht nur die neueste Nachricht), würde ich Sourcetree empfehlen. Die Schritte sind unter dem Bild aufgeführt.
Für Commits, die noch nicht auf ein Remote-Repository hochgeladen wurden:
'project_path/.git/index.lock' kann nicht angelegt werden: Datei existiert bereits.
, wenn versucht wird, mehrere Commit-Nachrichten gleichzeitig zu ändern. Ich bin mir nicht genau sicher, was das Problem ist oder ob es in einer zukünftigen Version von Sourcetree behoben wird, aber wenn dies passiert, empfehle ich, sie nacheinander neu zu basieren (langsamer, aber scheint zuverlässiger zu sein)._...Oder... für Commits, die bereits hochgeladen wurden:
Befolgen Sie die Schritte in dieser Antwort, die ähnlich wie oben sind, jedoch erfordern, dass ein weiterer Befehl von der Befehlszeile aus ausgeführt wird (git push origin -f
), um den Branch erneut zu pushen. Ich empfehle, alles zu lesen und die notwendige Vorsicht walten zu lassen!
Wow, es gibt also viele Möglichkeiten, das zu tun.
Noch eine Möglichkeit, das zu tun, besteht darin, den letzten Commit zu löschen, aber seine Änderungen zu behalten, damit du deine Arbeit nicht verlierst. Du kannst dann einen weiteren Commit mit der korrigierten Nachricht machen. Das würde ungefähr so aussehen:
git reset --soft HEAD~1
git commit -m 'Neue und korrigierte Commit-Nachricht'
Das mache ich immer, wenn ich vergesse, eine Datei hinzuzufügen oder eine Änderung vorzunehmen.
Denke daran, --soft
anstatt von --hard
zu spezifizieren, sonst verlierst du diesen Commit komplett.
Dies tut genau das Gleiche wie git commit --amend
, mit der Ausnahme, dass es ein 2-Schritte-Prozess ist.
@JosephK.Strauss Ich glaube, dass das Ändern des Commits auch die ursprünglichen Commit-Autoren- und Datumsinformationen beibehält und die neuen Committer- und Datumsinformationen separat hinzufügt. Ich bin mir nicht sicher, ob dieser Ansatz das auch tut.
@EvertonAgner Du hast recht. --amend
behält die Autoreninformationen bei, aber die Frage fragt nur danach, die Nachricht zu ändern.
Wenn Sie nur den letzten Commit bearbeiten möchten, verwenden Sie:
git commit --amend
oder
git commit --amend -m 'eine Zeile Nachricht'
Wenn Sie jedoch mehrere aufeinanderfolgende Commits bearbeiten möchten, sollten Sie stattdessen Rebase verwenden:
git rebase -i
In einer Datei wie der obigen schreiben Sie bearbeiten/e
oder eine der anderen Optionen und drücken speichern und verlassen.
Jetzt sind Sie beim ersten falschen Commit. Machen Sie Änderungen in den Dateien, und sie werden automatisch für Sie gestaged. Geben Sie ein
git commit --amend
Speichern und verlassen Sie das und geben Sie ein
git rebase --continue
um zur nächsten Auswahl zu wechseln, bis Sie mit all Ihren Auswahlmöglichkeiten fertig sind.
Beachten Sie, dass sich alle SHA-Hashes nach diesem bestimmten Commit ändern.
Alle Nachrichten in der Rebase-Datei sind einzeilig, aber ich habe ursprünglich mehrere neue Zeilen. Ich befürchte, dass es ganz durcheinander geraten wird, wenn ich es so speichere. Ich habe versucht, die Bearbeitung im Originalformat zu arrangieren, aber die Nachricht wird auf die erste Zeile beschnitten, also musste ich die Änderungen zurücksetzen. Wie kann ich die ursprüngliche Textform bewahren?
Wenn Sie nur Ihre letzte Nachricht ändern möchten, sollten Sie die --only
Flagge oder deren Kurzform -o
mit commit --amend
verwenden:
git commit --amend -o -m "Neue Commit-Nachricht"
Dadurch wird sichergestellt, dass Sie Ihren Commit nicht versehentlich mit gestagten Inhalten erweitern. Natürlich ist es am besten, eine ordnungsgemäße $EDITOR
-Konfiguration zu haben. Dann können Sie die -m
Option weglassen und Git wird die Commit-Nachricht mit der alten vorfüllen. Auf diese Weise kann sie leicht bearbeitet werden.
Die "beste" Antwort beantwortet die Frage nicht. Sie gibt nur eine allgemeine Einführung in git commit --amend
. Die Frage war sehr spezifisch, daher gilt länger != besser. Die entscheidende Erwähnung des -o
Flags würde wahrscheinlich im Rest der Informationen untergehen. Außerdem fühle ich mich nicht wohl dabei, eine Antwort zu bearbeiten, die bereits so viele Stimmen hat.
Das gesagt, du bist frei, die oberste Antwort zu bearbeiten, da es eine echte Gefahr gibt, dass Leute das als "korrekte" Antwort verwenden. Es kann leicht passieren, dass du deinen Commit mit gestageten Sachen änderst - es ist mir passiert und es ist wirklich ärgerlich, wenn du das dann pushst. Aber dennoch ist Quantität keine Garantie für Korrektheit. Weder in der Anzahl der Antworten noch in der Anzahl der Stimmen.
Ich würde nicht so weit gehen zu sagen, dass die top-Antwort "falsch" ist und dass sie die Frage "nicht beantwortet". Es funktioniert auf jeden Fall und beantwortet die Frage, du musst nur darauf achten, dass du keine inszenierten Änderungen hast, wenn du etwas ändern möchtest. Aber ich verstehe deinen Punkt, Leute darüber informieren zu müssen. Ich werde es später bearbeiten, wenn ich Zeit habe.
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).