wake-up-neo.net

Ändern der Git-Commit-Nachricht nach Push (vorausgesetzt, dass niemand von der Fernbedienung gezogen hat)

Ich habe ein Git-Commit und anschließend Push gemacht. Ich möchte die Commit-Nachricht ändern. Wenn ich es richtig verstanden habe, ist dies nicht ratsam, da sich möglicherweise jemand aus dem Remote-Repository entfernt hat, bevor ich solche Änderungen vornehme. Was ist, wenn ich weiß, dass niemand gezogen hat? 

Gibt es eine Möglichkeit, dies zu tun?

781
K_U

Geschichte ändern

Wenn es sich um das letzte Commit handelt, können Sie dies einfach tun:

git commit --amend

Dadurch wird der Editor mit der letzten Commit-Nachricht angezeigt, und Sie können die Nachricht bearbeiten. (Sie können -m verwenden, wenn Sie die alte Nachricht löschen und eine neue verwenden möchten.)

Schieben

Und dann, wenn Sie drücken, tun Sie dies:

git Push --force-with-lease <repository> <branch>

Oder Sie können "+" verwenden:

git Push <repository> +<branch>

Oder Sie können --force verwenden:

git Push --force <repository> <branch>

Seien Sie vorsichtig, wenn Sie diese Befehle verwenden.

  • Wenn ein anderer Benutzer Änderungen an demselben Zweig vorgenommen hat, möchten Sie wahrscheinlich verhindern, dass diese Änderungen zerstört werden. Die --force-with-lease-Option ist am sichersten, da sie bei Upstream-Änderungen abgebrochen wird (

  • Wenn Sie den Zweig nicht explizit angeben, verwendet Git die Standard-Push-Einstellungen. Wenn Ihre Standard-Push-Einstellung "Matching" ist, können Sie Änderungen an mehreren Zweigen gleichzeitig löschen. 

Danach ziehen/holen

Jeder, der bereits gezogen hat, wird nun eine Fehlermeldung erhalten und muss aktualisieren (vorausgesetzt, dass er selbst keine Änderungen vornimmt), indem er Folgendes ausführt:

git fetch Origin
git reset --hard Origin/master # Loses local commits

Seien Sie vorsichtig, wenn Sie reset --hard verwenden. Wenn Sie Änderungen an dem Zweig vorgenommen haben, werden diese Änderungen gelöscht.

Ein Hinweis zum Ändern der Geschichte

Die zerstörten Daten sind wirklich nur die alte Festschreibungsnachricht, aber --force weiß das nicht und löscht auch andere Daten. Stellen Sie sich --force als "Ich möchte Daten zerstören, und ich weiß genau, welche Daten zerstört werden." Wenn die zerstörten Daten jedoch festgeschrieben werden, können Sie häufig alte Commits aus dem Reflog wiederherstellen. Die Daten sind tatsächlich verwaist und nicht zerstört (obwohl verwaiste Commits regelmäßig gelöscht werden).

Wenn Sie nicht glauben, dass Sie Daten zerstören, dann halten Sie sich von --force... schlechte Dinge können passieren fern.

Deshalb ist --force-with-lease etwas sicherer.

1151
Dietrich Epp

Sag nur :

git commit --amend -m "New commit message"

und dann

git Push --force
351

Könnte zu spät zur Party sein, hier ist eine Antwort, die ich hier nicht sehe.

Schritt1 : git rebase -i HEAD~n, um eine interaktive Datenbank für die letzten betroffenen n-Commits auszuführen.

git öffnet einen Editor, um diese Commits zu bearbeiten. Beachten Sie diesen Befehl: # r, reword = use commit, but edit the commit message, das ist genau das, was wir brauchen.

Schritt2 : Ändere pick in r für die Commits, die Sie aktualisieren möchten, und speichern Sie den Editor.

Schritt3 : Aktualisieren Sie in den folgenden Commit-Dateien die Commit-Nachricht wie gewünscht

Step4 : nachdem alle Commits aktualisiert wurden. Vielleicht möchten Sie git Push -f, um die Fernbedienung zu aktualisieren.

181
Jinsong Li

Verwenden Sie diese beiden Schritte in der Konsole:

git commit --amend -m "new commit message"

und dann

git Push -f

Erledigt :)

37
Abdul Rizwan

Es sollte beachtet werden, dass wenn Sie Push --force mit Mehrfachreferenzen verwenden, ALLE als Ergebnis geändert werden. Achten Sie darauf, dass Ihr Git Repo auf Push to eingestellt ist. Glücklicherweise gibt es eine Möglichkeit, den Prozess geringfügig abzusichern, indem ein einziger zu aktualisierender Zweig angegeben wird. Lesen Sie von den Git Man-Seiten:

Beachten Sie, dass --force für alle gesendeten Refs gilt und daher .__ verwendet. es mit Push.default auf Matching oder mit mehreren Push .__ eingestellt. Mit remote konfigurierte Ziele. *. Push überschreibt möglicherweise andere als der aktuelle Zweig (einschließlich lokaler Refs, die streng hinter ihrem entfernten Gegenstück liegen). Um einen Push auf nur einen Zweig zu erzwingen, verwenden Sie + vor dem refspec to Push (z. B. git Push Origin + master zum erzwingen a Push an den master-Zweig).

18
Steve Benner

Wenn Sie ein älteres Commit ändern möchten, nicht das letzte, müssen Sie den Befehl rebase verwenden, wie im Folgenden beschrieben, Github-Hilfeseite , im Abschnitt Änderung der Nachricht älterer Commit-Nachrichten oder mehrerer Commit-Nachrichten

11
Carlos

Befehl 1 .

git commit --amend -m "New and correct message"

Dann,

Befehl 2 .

git Push Origin --force
7
Teo Choong Ping
git commit --amend

bearbeiten Sie dann die Nachricht im aktuellen Fenster. Danach mache

git Push --force-with-lease
3
Beulah Sheeba

Das funktioniert für mich ziemlich gut, 

git checkout Herkunft/Zweigname

wenn Sie sich bereits in einem Zweig befinden, ist es besser, Pull oder Rebase durchzuführen

git pull

oder 

git -c core.quotepath=false fetch Origin --progress --Prune

Später können Sie einfach verwenden

git commit --amend -m "Your message here"

oder wenn Sie den Texteditor öffnen möchten, verwenden Sie

git commit --amend

Ich werde den Texteditor vorziehen, wenn Sie viele Kommentare haben. Sie können Ihren bevorzugten Texteditor mit dem Befehl einstellen

git config --global core.editor your_preffered_editor_here

Wenn Sie die Commit-Nachricht jedoch noch nicht geändert haben, speichern Sie sie und beenden Sie den Vorgang

und dann rennen

git Push --force

Und du bist fertig

1
Hasasn

Eine weitere Option besteht darin, ein zusätzliches "errata commit" (und Push) zu erstellen, das auf das commit-Objekt verweist, das den Fehler enthält. Das neue errata-commit sorgt auch für die Korrektur. Ein Errata-Commit ist ein Commit, das keine wesentlichen Codeänderungen enthält, sondern eine wichtige Commit-Nachricht. Fügen Sie z. B. ein Leerzeichen zu Ihrer Readme-Datei hinzu und bestätigen Sie die Änderung mit der wichtigen Commit-Nachricht oder verwenden Sie die git-Option --allow-empty. Es ist sicherlich einfacher und sicherer als eine Umbasierung, es ändert nicht die wahre Historie und hält den Zweigbaum sauber (die Verwendung von amend ist auch eine gute Wahl, wenn Sie das letzte Commit korrigieren. Ein Errata-Commit kann jedoch eine gute Wahl sein ältere Commits). So etwas passiert so selten, dass es einfach gut genug ist, den Fehler zu dokumentieren. Wenn Sie in einem Git-Protokoll nach einem Feature-Schlüsselwort suchen müssen, wird das ursprüngliche (fehlerhafte) Commit möglicherweise nicht angezeigt, da in dem ursprünglichen Commit (dem ursprünglichen Tippfehler) das falsche Schlüsselwort verwendet wurde. Das Schlüsselwort wird jedoch angezeigt Im Errata-Commit wird dann auf das ursprüngliche Commit hingewiesen, das den Tippfehler hatte. Hier ist ein Beispiel:

 $ git log 
 Festschreiben 0c28141c68adae276840f17ccd4766542c33cf1d
Autor: Erstes Letztes 
 Datum: Mi Aug 8 15:55:52 2018 -0600 

 Errata-Commit: 
 Dieses Commit hat keine wesentliche Änderung des Codes. Diese Festschreibung wird nur bereitgestellt, um eine Korrektur einer vorherigen Festschreibenachricht zu dokumentieren. Dies betrifft das Festschreiben des Objekts e083a7abd8deb5776cb304fa13731a4182a24be1 
 Ursprüngliche falsche Commit-Nachricht: 
 Hintergrundfarbe in Rot geändert 
 Korrektur (* hervorgehobene Änderung *): 
 Hintergrundfarbe geändert in * blau * 

 Festschreiben 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Autor: Erstes Letztes 
 Datum: Mi Aug 8 15:43:16 2018 -0600 

 Einige vorläufige Festschreibenachricht 

 Festschreiben e083a7abd8deb5776cb304fa13731a4182a24be1
Autor: Erster Letzter 
 Datum: Mi Aug 8 13:31:32 2018 -0600 

 Hintergrundfarbe in Rot geändert 
1
rob_7cc

zusätzliche Informationen für dasselbe Problem, wenn Sie eine Bitbucket-Pipeline verwenden

bearbeiten Sie Ihre Nachricht

git commit --amend

Drücken Sie auf den Server 

git Push --force <repository> <branch>

fügen Sie dann --force zu Ihrem Push-Befehl in der Pipeline hinzu 

git ftp Push --force

Dadurch werden Ihre vorherigen Commit (s) gelöscht und der aktuelle Commit verschoben.

entfernen Sie die --force nach dem ersten Drücken 

ich habe es auf Bitbucket Pipeline ausprobiert und es funktioniert einwandfrei