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

169voto

Havard Graff Punkte 2769

Ich benutze so oft wie möglich das Git GUI, und das gibt Ihnen die Möglichkeit, den letzten Commit zu ändern:

Tick that box

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.

2 Stimmen

Es ist der untere rechte Teil des Windows Git-Gui. Wählen Sie einfach den Schalter 'Letzten Commit ändern' aus, und er wird mit den neuesten Commit-Informationen befüllt.

150voto

Steve Chambers Punkte 33674

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.

Sourcetree interactive rebase

Für Commits, die noch nicht auf ein Remote-Repository hochgeladen wurden:

  1. Stellen Sie sicher, dass Sie alle aktuellen Änderungen committet oder gestasht haben (dh. dass keine Dateien im "Dateistatus"-Tab aufgelistet sind) - ansonsten funktioniert es nicht.
  2. Klicken Sie im "Log / Verlauf"-Tab mit der rechten Maustaste auf den Eintrag mit einer angrenzenden Linie im Diagramm eine Zeile darunter des zu bearbeitenden Commits und wählen Sie "Kinder von interaktiv neu basieren...".
  3. Wählen Sie die gesamte Zeile für eine Commit-Nachricht aus, die Sie ändern möchten (klicken Sie auf die "Nachricht"-Spalte).
  4. Klicken Sie auf die Schaltfläche "Nachricht bearbeiten".
  5. Bearbeiten Sie die Nachricht wie gewünscht im daraufhin angezeigten Dialog und klicken Sie dann auf OK.
  6. Wiederholen Sie Schritte 3-4, wenn Sie weitere Commit-Nachrichten ändern möchten.
  7. Klicken Sie auf OK: Die Neu-Basisierung wird gestartet. Wenn alles in Ordnung ist, endet die Ausgabe mit "Erfolgreich abgeschlossen". _HINWEIS: Manchmal ist dies fehlgeschlagen mit '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!

2 Stimmen

Aus allen Antworten — das ist am meisten geeignet für alle Git-Neulinge ^^^ (verwenden Sie ein kostenloses Programm SourceTree und wenden Sie "Rebase children of" auf einem Commit vor demjenigen an, den Sie bearbeiten möchten)

141voto

Radu Murzea Punkte 10364

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.

5 Stimmen

Dies tut genau das Gleiche wie git commit --amend, mit der Ausnahme, dass es ein 2-Schritte-Prozess ist.

4 Stimmen

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

4 Stimmen

@EvertonAgner Du hast recht. --amend behält die Autoreninformationen bei, aber die Frage fragt nur danach, die Nachricht zu ändern.

132voto

Shubham Chaudhary Punkte 41926

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 

Git rebase bearbeiten

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.

2 Stimmen

Git rebase -i funktioniert für mich. Danke.

0 Stimmen

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?

130voto

David Ongaro Punkte 3037

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.

1 Stimmen

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.

2 Stimmen

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.

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