Wie kann man bestehende, nicht gepushte Commits ändern?

Ich habe das Falsche in die Commit-Nachricht geschrieben. Ich habe auch vergessen, einige Dateien einzuschließen.

Wie ändere ich die Nachrichten / Dateien? Das Commit hat noch nicht begonnen.

7676
07 окт. eingestellt von Laurie Young 07 Okt 2008-10-07 18:44 08 um 18:44 2008-10-07 18:44
@ 27 Antworten

Änderungen an der letzten Commit-Nachricht

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

Dies kann jedoch die Eingabe von mehrzeiligen Commit-Nachrichten oder kleinen Korrekturen erschweren.

Bevor Sie dies tun, stellen Sie sicher, dass Sie keine Änderungen an der Arbeitskopie vorgenommen haben, andernfalls werden sie behoben. (Nicht vorgenommene Änderungen werden nicht behoben.)

Ändern der Commit-Nachricht, die Sie bereits an die entfernte Zweigstelle gesendet haben

Wenn Sie Ihr Commit bereits an einen entfernten Zweig verschoben haben, müssen Sie das Commit zwangsweise mit folgendem Befehl pushen :

SHA- IDs überschrieben. Dies führt zu einem Problem, wenn andere Personen Kopien der alten Commits haben, die Sie neu geschrieben haben.  Jeder, der über eine Kopie eines alten Commits verfügt, muss seine Arbeit mit dem neu umgeschriebenen Commit synchronisieren, was manchmal schwierig sein kann. Stellen Sie daher sicher, dass Sie sich mit anderen abstimmen, wenn Sie versuchen, die Historie eines Common Commets neu zu schreiben, oder vermeiden Sie generell das vollständige Schreiben von Commits. 


Verwenden Sie interaktives Rebaz

Eine andere Option ist die Verwendung der interaktiven Basis.
Auf diese Weise können Sie jede Nachricht bearbeiten, die Sie aktualisieren möchten, auch wenn es sich nicht um die letzte Nachricht handelt.

Gehen Sie folgendermaßen vor, um Git Squash zu machen:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Sobald Sie Ihre Commits vernichten, wählen Sie e/r , um die Nachricht zu bearbeiten.

2019

07 окт. Die Antwort ist EfForEffort 07. Okt. 2008-10-07 18:50 08 um 18:50 Uhr 2008-10-07 18:50
2438
08 февр. Die Antwort lautet: lfx_cool 08. Feb. 2010-02-08 07:26 '10 um 07:26 Uhr 2010-02-08 07:26

Wenn der Fix, den Sie beheben möchten, nicht der letzte ist:

  • git rebase --interactive $parent_of_flawed_commit

    Wenn Sie mehrere fehlerhafte Commits korrigieren möchten, übergeben Sie den übergeordneten Code des ältesten.

  • Ein Editor wird mit einer Liste aller Commits angezeigt, seit Sie es gegeben haben.

    • Ändern Sie die pick in reword (oder in alten Versionen von Git, um sie zu edit ), bevor Sie Fixes beheben.
    • Nach dem Speichern gibt Git die aufgelisteten Commits wieder.

  • Bei jedem Commit, das Sie wiederholen möchten, führt Git Sie zurück zu Ihrem Editor. Für jedes Commit, das Sie ändern möchten, werden Sie von Git in eine Shell eingefügt. Wenn Sie sich in einer Shell befinden:

    • Ändern Sie die Fixierung auf irgendeine Weise.
    • git commit --amend
    • git rebase --continue

Der größte Teil dieser Abfolge wird Ihnen durch die Ausgabe verschiedener Teams auf dem Sprung erklärt. Es ist sehr einfach, Sie müssen es nicht auswendig lernen - denken Sie daran, dass Sie mit git rebase --interactive das git rebase --interactive können, egal wie >


Beachten Sie, dass Sie die bereits eingegangenen Zusagen nicht ändern möchten. Oder vielleicht auch, aber in diesem Fall müssen Sie sehr sorgfältig darauf achten, mit allen zu kommunizieren, die Ihre Verpflichtungen eingegangen sind und darüber hinaus gearbeitet haben. Wie kann ich wiederherstellen / erneut synchronisieren, nachdem jemand eine Rebase gezogen oder auf einen veröffentlichten Thread zurückgesetzt hat?

2321
07 окт. Die Antwort gibt Aristoteles Pagaltzis vom 7. Oktober 2008-10-07 22:52 08 um 22:52 Uhr 2008-10-07 22:52

Wenn Sie Änderungen an einem vorherigen Commit vornehmen möchten, nehmen Sie die erforderlichen Änderungen vor, nehmen Sie diese Änderungen vor und führen Sie sie aus

 git commit --amend -C HEAD 

Um den vorherigen Commit zu korrigieren und ihn vollständig zu entfernen, führen Sie ihn aus

 git rebase -i HEAD~ commit_count 

(Ersetzen Sie commit_count durch die Anzahl der Commits, die Sie ändern möchten.) Dieser Befehl startet Ihren Editor. Markieren Sie den ersten Halter (den, den Sie ändern möchten) als "Bearbeiten" anstelle von "Auswählen". Speichern Sie dann und verlassen Sie den Editor. Nehmen Sie die gewünschten Änderungen vor und führen Sie sie aus

758
16 авг. Die Antwort wird von Fatih 16 Aug gegeben. 2011-08-16 00:20 '11 at 0:20 2011-08-16 00:20

Wie bereits erwähnt, ist git commit --amend eine Möglichkeit, das letzte Commit zu überschreiben. Ein Hinweis: Wenn Sie auch Dateien überschreiben möchten, lautet der Befehl

390
07 июня '11 в 0:16 2011-06-07 00:16 Die Antwort wird von John am 7. Juni 11 um 0:16 2011-06-07 00:16 gegeben

Sie können dazu auch git filter-branch .

351
01 сент. Antwort Mark 01 Sep 2012-09-01 23:35 '12 um 23:35 2012-09-01 23:35

Ich bevorzuge diesen Weg.

 git commit --amend -c <commit ID> 

Andernfalls wird ein neues Commit mit einer neuen Commit-ID angezeigt.

312
10 янв. Antwort von krevedko 10. Januar 2013-01-10 17:23 '13 am 17:23 2013-01-10 17:23

Wenn Sie das Git-GUI-Tool verwenden, gibt es eine Schaltfläche mit dem Namen last last commit. Klicken Sie auf diese Schaltfläche und zeigen Sie Ihre neuesten Festschreibungsdateien und Nachrichten an. Bearbeiten Sie diese Nachricht einfach und Sie können sie mit einer neuen Bestätigungsnachricht korrigieren.

Oder verwenden Sie diesen Befehl von der Konsole / vom Terminal aus:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. Die Antwort ist gegeben Akhilraj NS 08 Nov. 2012-11-08 06:51 '12 um 06:51 2012-11-08 06:51

Sie können Git Umbasing verwenden . Wenn Sie zum Beispiel das Commit bbc643cd erneut verwenden möchten, führen Sie Folgendes aus

 $ git rebase bbc643cd^ --interactive 

Ändern Sie im Standardeditor in der Zeile, deren Commit Sie ändern möchten, 'pick' in 'edit'. Nehmen Sie Änderungen vor und führen Sie sie dann mit aus

 $ git add <filepattern> 

Jetzt können Sie verwenden

 $ git commit --amend 

das Commit zu ändern und danach

 $ git rebase --continue 

um zur vorherigen Fixierung des Kapitels zurückzukehren.

282
22 янв. Die Antwort gibt Shoaib Ud-Din vom 22. Januar 2013-01-22 20:23 '13 um 20:23 2013-01-22 20:23
  • Wenn Sie die letzte Commit-Nachricht ändern möchten, gehen Sie folgendermaßen vor:

     git commit --amend 

    Dadurch ge>

  • Wenn Sie die letzten 3 Commit-Nachrichten oder Commit-Nachrichten bis zu diesem Punkt ändern möchten, setzen Sie HEAD~3 auf den git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. Antwort von Heena Hussain 22. Oktober 2012-10-22 14:22 '12 um 14:22 Uhr 2012-10-22 14:22

Wenn Sie die alte Festschreibungsnachricht in mehrere Zweige ändern müssen (d. H. Eine Nachricht mit Fehlermeldung ist in mehreren Zweigen vorhanden), können Sie Folgendes verwenden:

15 нояб. Die Antwort wird von den Herren am 15. November gegeben. 2012-11-15 12:29 '12 at 12:29 2012-11-15 12:29

Verwendung von

 git commit --amend 

Um dies im Detail zu verstehen, ist ein hervorragender Beitrag 4. Git-Verlauf überschreiben . Außerdem git commit --amend Sie, wann Sie git commit --amend nicht verwenden git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 Die Antwort ist skin 27. März 13 um 23:43 Uhr 2013-03-27 23:43 gegeben

Ändern

Sie haben mehrere Möglichkeiten. Du kannst es tun

 git commit --amend 

bis es zuletzt ausgeführt wird.

Interaktive Umleitung

Wenn dies nicht Ihr letzter Commit ist, können Sie einen interaktiven Neustart durchführen.

 git rebase -i [branched_from] [hash before commit] 

In der interaktiven Umleitung fügen Sie diesem Commit dann einfach eine Änderung hinzu. Wenn dies geschieht, führen Sie git commit --amend und ändern Sie die Commit-Nachricht. Wenn Sie zu diesem Fixierungspunkt zurückkehren möchten, können Sie auch git reflog und diesen Fix einfach entfernen. Dann führen Sie git commit erneut aus.

195
18 янв. Die Antwort ist Wallerjake 18. Januar gegeben 2013-01-18 04:45 '13 um 04:45 Uhr 2013-01-18 04:45

Wenn Sie die Git-GUI verwenden, können Sie das letzte Commit ändern, auf das nicht geklickt wurde:

 Commit/Amend Last Commit 
183
01 дек. Die Antwort gibt der Gulchrider vom 01. Dezember. 2012-12-01 08:03 '12 am 8:03 2012-12-01 08:03

Wenn dies Ihr letzter Commit ist, korrigieren Sie einfach den Commit:

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

(Verwenden Sie das Flag -o ( --only ), um sicherzustellen, dass Sie nur die Commit-Nachricht ändern.)


Wenn es nach einem Commit aussieht, verwenden Sie eine erstaunliche interaktive Basis :

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Suchen Sie den gewünschten Commit, ändern Sie die pick in r ( reword ) und speichern und schließen Sie die Datei. Fertig!



Miniatur-Tutorial vim (oder wie Sie nur 8 Tastenanschläge 3j cw r Esc ZZ installieren):

  • Führen Sie den vimtutor wenn Sie Zeit haben.
  • h j k l entsprechen den Navigationstasten
  • Alle Befehle können zum Beispiel ein Bereichspräfix haben. 3j bewegt sich zu 3 Zeilen
  • i in den Einfügemodus zu ge>
  • Esc oder Strg c , c den Einfügemodus zu verlassen und zum Normalmodus zurückzukehren.
  • u zu stornieren
  • Strg r zum Wiederholen
  • dd , dw , dl , um eine Zeile, ein Wort oder einen Buchstaben zu löschen
  • cc , cw , cl , um eine Zeile, ein Wort oder einen Buchstaben zu ändern (wie dd i )
  • yy , yw , yl um Zeilen, Wörter oder Buchstaben zu kopieren
  • p oder p zum Einfügen nach bzw. vor der aktuellen Position
  • :w Zum Speichern (Schreiben) der Datei eingeben
  • :q! Beenden ohne zu speichern
  • :wq Enter oder ZZ zum Speichern und Beenden

Wenn Sie viel Text bearbeiten, wechseln Sie zum Dvorak-Tastaturlayout, lernen Sie den Berührungstyp und lernen Sie Vim. Lohnt sich die Anstrengung? Ja



ProTip ™: Scheuen Sie sich nicht, mit "gefährlichen" Befehlen zu experimentieren, die den Verlauf neu schreiben * - Git entfernt Ihre Fixes standardmäßig nicht für 90 Tage; Sie finden sie im reflog:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* --hard Sie auf Parameter wie - --hard und --force , obwohl sie möglicherweise Daten verwerfen.
* Schreiben Sie in keinem Zweig, in dem Sie zusammenarbeiten, die Historie neu.

170
10 февр. Die Antwort ist Zaz 10 Feb. gegeben. 2015-02-10 03:01 '15 am 3:01 2015-02-10 03:01

Ich benutze Git GUI so oft ich kann, und hier haben Sie die Möglichkeit, die letzte Nachricht zu ändern:

2019

165
05 авг. die antwort wird von havard graff 05 aug gegeben. 2013-08-05 02:13 '13 am 2:13 2013-08-05 02:13

Wow, es gibt viele Möglichkeiten, dies zu tun.

Eine andere Möglichkeit besteht darin, das letzte Commit zu löschen, aber die Änderungen zu speichern, damit Sie Ihren Job nicht verlieren. Sie können dann ein weiteres Commit mit einer korrigierten Nachricht ausführen. Es wird ungefähr so ​​aussehen:

135
03 дек. Die Antwort gibt Radu Murzea 03 Dez. 2013-12-03 00:31 '13 am 0:31 2013-12-03 00:31

Wenn Sie die letzte Verwendung von Commit ändern möchten:

 git commit --amend 

oder

124
07 янв. Antwort von Shubham Chaudhary 07 Jan 2014-01-07 01:03 '14 um 1:03 2014-01-07 01:03

Für diejenigen, die nach einer grafischen Benutzeroberfläche für Windows / Mac suchen, um alte Nachrichten zu bearbeiten (d. H. Nicht nur die neueste Nachricht), würde ich SourceTree empfehlen. Schritte unten folgen.

2019

123
06 нояб. Die Antwort wird von Steve Chambers am 6. November gegeben 2014-11-06 18:01 '14 um 18:01 2014-11-06 18:01

Wenn Sie die letzte Nachricht ändern möchten, müssen Sie das Flag --only oder die Verknüpfung -o mit commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 antwortete David Ongaro am 23. Mai 14 um 11:40 Uhr 2014-05-23 11:40

Aktualisieren Sie die letzte Fehlernachricht mit einer neuen Commit-Nachricht in einer Zeile:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Verwenden Sie reset, um Commits in kleinere Commits aufzuteilen.

git reset können Sie ein Commit in mehrere Commits unterteilen:

99
22 янв. Die Antwort ist przbadu 22. Januar gegeben 2014-01-22 11:57 '14 um 11:57 2014-01-22 11:57

Es gibt viele Antworten auf diese Frage, aber keine davon erklärt im Detail, wie alte Fixierungsmeldungen mit VIM geändert werden können. Ich versuche, es selbst zu tun, daher erzähle ich Ihnen im Detail, wie ich es gemacht habe, besonders für Leute, die keine Erfahrung mit VIM haben!

Ich wollte meine letzten fünf Commits ändern, die ich bereits auf dem Server angeklickt hatte. Es ist ziemlich "gefährlich", wenn jemand anderes daraus gezogen wird. Sie können Dinge beschädigen, indem Sie die Commit-Nachrichten ändern. Wenn Sie jedoch an Ihrem kleinen Zweig arbeiten und sicher sind, dass niemand daran gezogen hat, können Sie ihn wie folgt ändern:

Angenommen, Sie möchten Ihre letzten fünf Commits ändern, und geben Sie diese in das Terminal ein:

git rebase -i HEAD~5 * Wobei 5 die Anzahl der Commit-Nachrichten ist, die Sie ändern möchten. (Wenn Sie also den 10. bis zum letzten Commit ändern möchten, geben Sie 10 ein.)

Dieser Befehl führt Sie zu VIM, wo Sie den Commit-Verlauf bearbeiten können. Die letzten 5 Commits werden oben angezeigt:

pick <commit hash> commit message

Anstelle von pick Sie eine reword schreiben. Sie können dies in VIM tun, indem Sie i eingeben, wodurch Sie in den INSERT-Modus wechseln müssen. (Sie können sehen, dass Sie sich im Einfügemodus mit dem Wort INSERT unten befinden). Bei Commits möchten Sie den Typ in reword anstelle von pick ändern

Dann müssen Sie diesen Bildschirm speichern und verlassen, indem Sie zunächst durch Drücken der esc-Taste in den Befehlsmodus wechseln. (Sie können überprüfen, ob Sie sich im Befehlsmodus befinden, wenn das Wort INSERT unten verschwindet). Dann können Sie einen Befehl eingeben : indem Sie wq eingeben : Befehl zum Speichern und Beenden lautet wq . Wenn Sie also :wq eingeben :wq Ihr wisst, hat er Recht.

Dann geht VIM zu jeder Commit-Nachricht, die Sie umschreiben möchten. Hier können Sie die Commit-Nachricht tatsächlich ändern. Sie tun dies, indem Sie in den INSERT-Modus wechseln, die Festschreibungsnachricht ändern, in den Befehlsmodus gehen und speichern und schließen. Machen Sie es fünfmal, und Sie haben kein VIM mehr!

Wenn Sie Ihre falschen Commits bereits gepusht haben, müssen Sie git push --force um sie git push --force überschreiben. Denken Sie daran, dass git push --force ein ziemlich gefährliches Ding ist. Stellen Sie also sicher, dass niemand vom Server abgezogen wird, da Sie Ihr falsches Commit ausgeführt haben!

Jetzt haben Sie Ihre Botschaft geändert.

(Wie Sie sehen, bin ich am VIM nicht so erfahren. Wenn ich also den falschen S>

82
07 авг. Die Antwort wird Marijn 07 Aug gegeben. 2014-08-07 12:18 14 am 12:18 2014-08-07 12:18

Sie können git-rebase-reword verwenden

Es ist so konzipiert, dass Sie ein Commit (nicht nur das letzte) bearbeiten können, genau wie commit --amend

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

Примеры:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24

Я понял, что я нажал на фиксацию с опечаткой. Чтобы отменить, я сделал следующее:

55
ответ дан neoneye 19 июля '14 в 20:27 2014-07-19 20:27

Мне нравится использовать следующее:

  • git status
  • git add --all
  • git commit -am "message goes here about the change"
  • git pull <origin master>
  • git push <origin master>
49
ответ дан Kedar Adhikari 08 сент. '14 в 12:14 2014-09-08 12:14

Если вы не нажали код на удаленную ветку ( GitHub / Bitbucket ) вы можете изменить сообщение коммита в командной строке, как показано ниже.

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

Если вы работаете с определенной веткой, выполните следующее:

 git commit --amend -m "BRANCH-NAME: new message" 

Если вы уже нажали на код с неправильным сообщением, и вам нужно быть осторожным при изменении сообщения. То есть, после того, как вы измените сообщение коммита и попробуйте нажать его снова, у вас возникнут проблемы. Чтобы сделать его гладким, выполните следующие действия.

Пожалуйста, прочтите мой весь ответ, прежде чем делать это.

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Важное примечание: . Когда вы используете принудительное нажатие, вы можете столкнуться с проблемами кода, которые другие разработчики работают над одной ветвью. Чтобы избежать этих конфликтов, вам нужно вытащить код из своей ветки, прежде чем нажимать force :

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

Это наилучшая практика при изменении сообщения фиксации, если оно уже было нажато.

43
ответ дан Prabhakar 13 янв. '15 в 10:03 2015-01-13 10:03

Другие вопросы по меткам или Задайте вопрос