Ich habe das Falsche in eine Commit-Nachricht geschrieben.
Wie kann ich die Nachricht ändern? Das Commit wurde noch nicht verschoben.
Ich habe das Falsche in eine Commit-Nachricht geschrieben.
Wie kann ich die Nachricht ändern? Das Commit wurde noch nicht verschoben.
Antworten:
git commit --amend
öffnet Ihren Editor und ermöglicht es Ihnen, die Commit-Nachricht des letzten Commits zu ändern. Darüber hinaus können Sie die Festschreibungsnachricht direkt in der Befehlszeile festlegen mit:
git commit --amend -m "New commit message"
… Dies kann jedoch die Eingabe von mehrzeiligen Festschreibungsnachrichten oder kleinen Korrekturen erschweren.
Stellen Sie sicher, dass Sie keine Änderungen an Arbeitskopien vorgenommen haben , bevor Sie dies tun. Andernfalls werden sie auch festgeschrieben. ( Nicht bereitgestellte Änderungen werden nicht festgeschrieben.)
Wenn Sie Ihr Commit bereits auf Ihren Remote-Zweig übertragen haben, müssen Sie nach dem lokalen Ändern Ihres Commits (wie oben beschrieben) auch das Push-Commit erzwingen mit:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Warnung: Durch Force-Push wird der Remote-Zweig mit dem Status Ihres lokalen Zweigs überschrieben . Wenn es Commits auf dem Remote - Zweig sind , dass Sie nicht in Ihrem lokalen Niederlassung haben, Sie werden diese Commits verlieren.
Warnung: Seien Sie vorsichtig bei der Änderung von Commits, die Sie bereits mit anderen Personen geteilt haben. Zur Änderung der Commits im Wesentlichen umschreibt sie anders haben SHA - IDs, die ein Problem darstellt , wenn andere Leute haben Kopien der alten verpflichten , dass Sie neu geschrieben haben. Jeder, der über eine Kopie des alten Commits verfügt, muss seine Arbeit mit Ihrem neu geschriebenen Commit synchronisieren, was manchmal schwierig sein kann. Stellen Sie daher sicher, dass Sie sich mit anderen koordinieren, wenn Sie versuchen, den Verlauf des gemeinsam genutzten Commits neu zu schreiben, oder vermeiden Sie es einfach, gemeinsam genutzte Commits neu zu schreiben insgesamt.
Eine weitere Option ist die Verwendung der interaktiven Rebase. Auf diese Weise können Sie jede Nachricht bearbeiten, die Sie aktualisieren möchten, auch wenn es sich nicht um die neueste Nachricht handelt.
Gehen Sie folgendermaßen vor, um einen Git-Squash zu erstellen:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Sobald Sie Ihre Commits gequetscht haben, wählen Sie die e/r
zum Bearbeiten der Nachricht:
Wenn Sie verwenden, git rebase -i HEAD~n
kann es mehr als n Commits geben. Git "sammelt" alle Commits in den letzten n Commits, und wenn irgendwo zwischen diesem Bereich eine Zusammenführung stattgefunden hat, werden auch alle Commits angezeigt, sodass das Ergebnis n + ist.
Wenn Sie dies für mehr als einen Zweig tun müssen und beim Ändern des Inhalts möglicherweise Konflikte auftreten, richten git rerere
Sie Git ein und lassen Sie diese Konflikte automatisch für Sie lösen.
git commit --amend
Ist jedoch nicht so mächtig wie git rebase -i
.
git commit --amend
können die (a?) Meister reparieren begehen.
git push -f origin branchname
git push -f
ein bisschen gefährlich, wenn andere Leute das gleiche Repository verwenden?
git commit --amend -c HEAD
. Dadurch wird der Editor geöffnet, der mit Ihrer alten Festschreibungsnachricht gefüllt ist, sodass Sie sie ändern können.
git commit --amend -m "your new message"
Wenn das Commit, das Sie beheben möchten, nicht das aktuellste ist:
git rebase --interactive $parent_of_flawed_commit
Wenn Sie mehrere fehlerhafte Commits beheben möchten, übergeben Sie das übergeordnete Element des ältesten.
Es erscheint ein Editor mit einer Liste aller Commits seit dem von Ihnen angegebenen.
pick
zu reword
(oder bei alten Versionen von Git zu edit
).Für jedes Commit, das Sie umformulieren möchten, werden Sie von Git wieder in Ihren Editor verschoben . Für jedes Commit, das Sie bearbeiten möchten , werden Sie von Git in die Shell eingefügt. Wenn Sie in der Shell sind:
git commit --amend
git rebase --continue
Der größte Teil dieser Sequenz wird Ihnen durch die Ausgabe der verschiedenen Befehle erklärt. Es ist sehr leicht; Sie müssen es sich nicht merken - denken git rebase --interactive
Sie daran, dass Sie Commits korrigieren können, egal wie lange sie her sind.
Beachten Sie, dass Sie Commits, die Sie bereits gepusht haben, nicht ändern möchten. Oder vielleicht doch, aber in diesem Fall müssen Sie sehr vorsichtig sein, um mit allen zu kommunizieren, die möglicherweise Ihre Verpflichtungen eingegangen sind und darüber gearbeitet haben. Wie kann ich wiederherstellen / neu synchronisieren, nachdem jemand eine Rebase oder ein Reset in einen veröffentlichten Zweig verschoben hat?
reword
anstelle von pick
die Protokollnachricht bearbeiten.
$parent_of_flawed_commit
gleichbedeutend mit $flawed_commit^
.
-p
( --preserve-merges
), wenn nach dem fehlerhaften Commit eine Zusammenführung stattgefunden hat.
Um das vorherige Commit zu ändern, nehmen Sie die gewünschten Änderungen vor, führen Sie diese Änderungen durch und führen Sie sie aus
git commit --amend
Dadurch wird eine Datei in Ihrem Texteditor geöffnet, die Ihre neue Festschreibungsnachricht darstellt. Es beginnt mit dem Text aus Ihrer alten Festschreibungsnachricht. Ändern Sie die Festschreibungsnachricht wie gewünscht, speichern Sie die Datei und beenden Sie den Editor, um den Vorgang abzuschließen.
Führen Sie aus, um das vorherige Commit zu ändern und dieselbe Protokollnachricht beizubehalten
git commit --amend -C HEAD
Führen Sie aus, um das vorherige Commit durch vollständiges Entfernen zu beheben
git reset --hard HEAD^
Wenn Sie mehr als eine Festschreibungsnachricht bearbeiten möchten, führen Sie sie aus
git rebase -i HEAD~commit_count
(Ersetzen Sie commit_count durch die Anzahl der Commits, die Sie bearbeiten möchten.) Dieser Befehl startet Ihren Editor. Markieren Sie das erste Commit (das Sie ändern möchten) als "Bearbeiten" anstelle von "Auswählen", speichern Sie den Editor und beenden Sie ihn. Nehmen Sie die Änderung vor, die Sie festschreiben möchten, und führen Sie sie dann aus
git commit --amend
git rebase --continue
Hinweis: Sie können die gewünschte Änderung auch über den von geöffneten Editor vornehmen git commit --amend
git rebase -i HEAD~commit_count
Außerdem können Sie die Festschreibungsnachrichten für beliebig viele Festschreibungen ändern. Markieren Sie einfach die ausgewählten Commits als "Reword" anstelle von "Pick".
git reset --hard
vernichtet nicht festgeschriebene Änderungen. Bitte ersetzen Sie --hard
mit --soft
.
git reset --hard
ist ein absolut legitimer Befehl, aber angesichts der Frage irreführend. Sie verwenden, --hard
wenn Sie Änderungen festgeschrieben haben, die Sie wegwerfen möchten, und nicht, wenn Sie in der Festschreibungsnachricht einen Tippfehler gemacht haben!
Wie bereits erwähnt, git commit --amend
ist dies der Weg, um das letzte Commit zu überschreiben. Ein Hinweis: Wenn Sie die Dateien auch überschreiben möchten, lautet der Befehl
git commit -a --amend -m "My new commit message"
git add file.ext
dann nurgit commit --amend
Sie können auch dafür verwenden git filter-branch
.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
Es ist nicht so einfach wie ein Trivial git commit --amend
, aber es ist besonders nützlich, wenn Sie nach Ihrer fehlerhaften Festschreibungsnachricht bereits einige Zusammenführungen haben.
Beachten Sie, dass dies versucht, jedes Commit zwischen HEAD
und das fehlerhafte Commit neu zu schreiben , daher sollten Sie Ihren msg-filter
Befehl mit Bedacht auswählen ;-)
$flawed_commit^..HEAD
nicht $flawed_commit..HEAD
. wie in der Manpage angegeben: « Der Befehl schreibt nur die in der Befehlszeile genannten positiven Verweise neu (z. B. wenn Sie a..b übergeben, wird nur b neu geschrieben). »
Ich bevorzuge diesen Weg:
git commit --amend -c <commit ID>
Andernfalls erfolgt ein neues Commit mit einer neuen Commit-ID.
-c
macht ein paar Dinge. Standardmäßig wird die alte Nachricht verwendet, es werden jedoch auch Informationen zur Urheberschaft (Person und Zeit) kopiert. -C
macht dasselbe, außer dass Sie nicht aufgefordert werden, die Nachricht zu bearbeiten.
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
Wenn Sie das Git-GUI-Tool verwenden, gibt es eine Schaltfläche mit dem Namen Letzte Festschreibung ändern . Klicken Sie auf diese Schaltfläche, um Ihre letzten Festschreibungsdateien und Nachrichten anzuzeigen. Bearbeiten Sie einfach diese Nachricht, und Sie können sie mit einer neuen Festschreibungsnachricht festschreiben.
Oder verwenden Sie diesen Befehl von einer Konsole / einem Terminal aus:
git commit -a --amend -m "My new commit message"
Sie können Git Rebasing verwenden . Wenn Sie beispielsweise zurück ändern möchten, um bbc643cd festzuschreiben, führen Sie aus
$ git rebase bbc643cd^ --interactive
Ändern Sie im Standardeditor "Auswählen" in "Bearbeiten" in der Zeile, deren Commit Sie ändern möchten. Nehmen Sie Ihre Änderungen vor und inszenieren Sie sie dann mit
$ git add <filepattern>
Jetzt können Sie verwenden
$ git commit --amend
um das Commit zu ändern, und danach
$ git rebase --continue
um zum vorherigen Head Commit zurückzukehren.
git commit --amend
wirksam wurde, können Sie sie verwenden git show
und die neue Nachricht wird angezeigt.
Wenn Sie nur Ihre letzte Festschreibungsnachricht ändern möchten, gehen Sie wie folgt vor:
git commit --amend
Dadurch werden Sie in Ihren Texteditor eingefügt und können die letzte Festschreibungsnachricht ändern.
Wenn Sie die letzten drei Festschreibungsnachrichten oder eine der Festschreibungsnachrichten bis zu diesem Punkt ändern möchten, geben Sie HEAD~3
den folgenden git rebase -i
Befehl ein:
git rebase -i HEAD~3
git commit --amend
, und es sagt auch , dass Sie verwenden können git rebase -i HEAD~commit_count
, alles , was Sie taten , war Plug in 3
für commit_count
.
Wenn Sie eine alte Festschreibungsnachricht über mehrere Zweige hinweg ändern müssen (dh das Festschreiben mit der fehlerhaften Nachricht ist in mehreren Zweigen vorhanden), möchten Sie möglicherweise Folgendes verwenden:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git erstellt ein temporäres Verzeichnis zum Umschreiben und sichert zusätzlich alte Referenzen in refs/original/
.
-f
erzwingt die Ausführung der Operation. Dies ist erforderlich, wenn das temporäre Verzeichnis bereits vorhanden ist oder wenn bereits Referenzen unter gespeichert sind refs/original
. Ist dies nicht der Fall, können Sie dieses Flag löschen.
--
trennt Filterverzweigungsoptionen von Revisionsoptionen.
--all
stellt sicher, dass alle Zweige und Tags neu geschrieben werden.
Aufgrund der Sicherung Ihrer alten Referenzen können Sie problemlos zum Status zurückkehren, bevor Sie den Befehl ausführen.
Angenommen, Sie möchten Ihren Master wiederherstellen und im Zweig darauf zugreifen old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
, um Kommentare zu korrigieren oder Dateien hinzuzufügen, die ich vergessen habe git add
, aber immer, bevor ich sie bearbeitet habe git push
. Ich benutze es auch, git filter-branch
wenn ich mich total mit dem Versionsverlauf anlegen möchte, aber das OP will das nicht, deshalb braucht diese Antwort eine große Gesundheitswarnung - versuche das nicht zu Hause, guck mal !!
Verwenden
git commit --amend
Um es im Detail zu verstehen, ist ein ausgezeichneter Beitrag 4. Git History neu schreiben . Es wird auch darüber gesprochen, wann nicht verwendet werden soll git commit --amend
.
git commit --amend
Antwort wurde bereits (mehrmals) gegeben, bevor Sie Ihre geschrieben haben. Warum hast du es wieder gepostet? Wenn Sie einen Link zu "Rewriting Git History" hinzufügen möchten, können Sie eine der vorhandenen Antworten bearbeiten oder einen Kommentar hinterlassen.
Sie haben hier einige Möglichkeiten. Du kannst tun
git commit --amend
solange es dein letztes Commit ist.
Andernfalls können Sie eine interaktive Rebase durchführen, wenn dies nicht Ihr letztes Commit ist.
git rebase -i [branched_from] [hash before commit]
Dann fügen Sie innerhalb der interaktiven Rebase diesem Commit einfach eine Bearbeitung hinzu. Wenn es angezeigt wird, führen Sie eine git commit --amend
und ändern Sie die Festschreibungsnachricht. Wenn Sie vor diesem Festschreibungspunkt ein Rollback durchführen möchten, können Sie dieses Festschreiben auch verwenden git reflog
und einfach löschen. Dann machst du einfach git commit
nochmal einen.
Wenn es Ihr letztes Commit ist, ändern Sie einfach das Commit:
git commit --amend -o -m "New commit message"
(Verwenden Sie das Flag -o
( --only
), um sicherzustellen, dass Sie nur die Festschreibungsnachricht ändern.)
Wenn es sich um ein vergrabenes Commit handelt, verwenden Sie die fantastische interaktive Rebase :
git rebase -i @~9 # Show the last 9 commits in a text editor
Suchen Sie das gewünschte Commit, ändern Sie es pick
in r
( reword
) und speichern und schließen Sie die Datei. Erledigt!
Miniatur-Vim-Tutorial (oder wie man mit nur 8 Tastenanschlägen neu basiert 3j
cw
r
EscZZ
):
vimtutor
Sie, wenn Sie Zeit habenh
j
k
l
Bewegungstasten entsprechen ←↓↑→3j
drei Zeilen nach unteni
Um in den Einfügemodus zu gelangen, wird der von Ihnen eingegebene Text in der Datei angezeigtc
um den Einfügemodus zu verlassen und zum "normalen" Modus zurückzukehrenu
rückgängig machenr
wiederholendd
, dw
, dl
Um eine Linie, ein Wort oder Buchstaben zu löschen, bzw.cc
, cw
, cl
Um eine Linie, ein Wort oder Buchstaben zu ändern, bzw. (gleich wie dd
i
)yy
, yw
, yl
Zu kopieren ( „Ruck“) , um eine Linie, ein Wort oder Buchstaben bzw.p
oder P
nach bzw. vor der aktuellen Position einfügen:w
Enter eine Datei speichern (schreiben):q!
Enter ohne zu speichern zu beenden:wq
Enteroder ZZ
zu speichern und zu beendenWenn Sie häufig Text bearbeiten, wechseln Sie zum Dvorak-Tastaturlayout , lernen Sie das Tippen und lernen Sie Vim. Lohnt sich die Mühe? Ja.
ProTip ™: Haben Sie keine Angst, mit "gefährlichen" Befehlen zu experimentieren, die den Verlauf neu schreiben. * - Git löscht Ihre Commits standardmäßig 90 Tage lang nicht. Sie finden sie im Reflog:
$ git reset @~3 # Go back three 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
* Achten Sie auf Optionen wie --hard
und --force
obwohl - sie können Daten verwerfen.
* Schreiben Sie den Verlauf auch nicht in Zweigen neu, in denen Sie zusammenarbeiten.
nano
? Wir sprechen von trivialen Änderungen, die an einer Textdatei vorgenommen werden müssen, nicht von Hardcore-Codierung, die einen Flammenkrieg um den "besten" Texteditor erzeugen würde.
ddjjpZZ
ein Commit 2 nach unten verschoben . Das grundlegende Vim-Wissen ist nichts Arkanes. Es dauert 10 Minuten, um sich mit Vim besser vertraut zu machen als mit Nano.
Wenn Sie die Git-GUI verwenden, können Sie das letzte Commit ändern, mit dem nicht gepusht wurde:
Commit/Amend Last Commit
Ich benutze die Git-GUI so oft ich kann, und das gibt dir die Möglichkeit, das letzte Commit zu ändern:
Außerdem gibt git rebase -i origin/master
es ein nettes Mantra, das Ihnen immer die Commits präsentiert, die Sie zusätzlich zum Master ausgeführt haben, und Ihnen die Möglichkeit gibt, Änderungen vorzunehmen, zu löschen, neu zu ordnen oder zu quetschen. Sie müssen diesen Hash nicht zuerst in die Hand nehmen.
Wow, es gibt viele Möglichkeiten, dies zu tun.
Eine weitere Möglichkeit besteht darin, das letzte Commit zu löschen, die Änderungen jedoch beizubehalten, damit Sie Ihre Arbeit nicht verlieren. Sie können dann mit der korrigierten Nachricht ein weiteres Commit durchführen. Das würde ungefähr so aussehen:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
Ich mache das immer, wenn ich vergesse, eine Datei hinzuzufügen oder eine Änderung vorzunehmen.
Denken Sie daran, --soft
anstelle von anzugeben --hard
, da Sie sonst das Commit vollständig verlieren.
git commit --amend
Ausnahme, dass es sich um einen zweistufigen Prozess handelt.
--amend
behält die Autoreninformationen bei, aber die Frage fragt nur, ob die Nachricht geändert werden soll.
Für alle, die nach einer Windows / Mac-Benutzeroberfläche suchen, die beim Bearbeiten älterer Nachrichten (dh nicht nur der neuesten Nachricht) hilft , würde ich Sourcetree empfehlen . Die folgenden Schritte sind unten aufgeführt.
Für Commits, die noch nicht auf eine Fernbedienung übertragen wurden:
Unable to create 'project_path/.git/index.lock': File exists.
wenn versucht wird, mehrere Festschreibungsnachrichten gleichzeitig zu ändern. Sie sind sich nicht sicher, um welches Problem es sich handelt oder ob es in einer zukünftigen Version von Sourcetree behoben wird. In diesem Fall wird jedoch empfohlen, sie einzeln neu zu starten (langsamer, aber zuverlässiger).... oder ... für Commits, die bereits verschoben wurden:
Befolgen Sie die Schritte in dieser Antwort , die den obigen ähnlich sind, für die jedoch ein weiterer Befehl über die Befehlszeile ( git push origin <branch> -f
) ausgeführt werden muss, um den Zweig zwangsweise zu drücken. Ich würde empfehlen, alles zu lesen und die notwendige Vorsicht walten zu lassen!
Wenn Sie nur das letzte Commit bearbeiten möchten, verwenden Sie:
git commit --amend
oder
git commit --amend -m 'one line message'
Wenn Sie jedoch mehrere Commits hintereinander bearbeiten möchten, sollten Sie stattdessen die Neubasierung verwenden:
git rebase -i <hash of one commit before the wrong commit>
Schreiben Sie in eine Datei wie die oben beschriebene edit/e
oder eine der anderen Optionen und klicken Sie auf Speichern und beenden.
Jetzt sind Sie beim ersten falschen Commit. Nehmen Sie Änderungen an den Dateien vor, und diese werden automatisch für Sie bereitgestellt. Art
git commit --amend
Speichern und beenden Sie das und geben Sie ein
git rebase --continue
um zur nächsten Auswahl zu gelangen, bis alle Ihre Auswahlen abgeschlossen sind.
Beachten Sie, dass diese Dinge alle Ihre SHA-Hashes nach diesem bestimmten Commit ändern.
Wenn Sie nur Ihre letzte Nachricht ändern möchten, sollten Sie das --only
Flag oder dessen Verknüpfung verwenden -o
mit commit --amend
:
git commit --amend -o -m "New commit message"
Dies stellt sicher, dass Sie Ihr Commit nicht versehentlich durch inszenierte Inhalte verbessern. Natürlich ist es am besten, eine richtige $EDITOR
Konfiguration zu haben . Dann können Sie die -m
Option weglassen, und Git füllt die Commit-Nachricht mit der alten vor. Auf diese Weise kann es leicht bearbeitet werden.
git commit --amend
. Die Frage war sehr spezifisch, daher länger! = Besser. Die entscheidende Erwähnung der -o
Flagge würde wahrscheinlich im Rest der Informationen vergraben sein. Ich bin auch nicht zufrieden damit, eine Antwort zu bearbeiten, die bereits so viele Stimmen hat.
--only
Option mit --amend
seit Git 1.3.0 verfügbar ist, hat sie nicht richtig funktioniert, bis sie in 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ) behoben wurde . Die richtige Antwort im Jahr 2008 wäre also wahrscheinlich so gewesen : git stash; git commit --amend; git stash pop
.
Aktualisieren Sie Ihre letzte falsche Festschreibungsnachricht mit der neuen Festschreibungsnachricht in einer Zeile:
git commit --amend -m "your new commit message"
Oder versuchen Sie es mit einem Git-Reset wie folgt:
# 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.
git reset
kann Ihnen helfen, ein Commit auch in mehrere Commits aufzuteilen:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
Hier haben Sie Ihr letztes Commit erfolgreich in zwei Commits aufgeteilt.
git commit --amend
, genau wie es in der Antwort mit der höchsten Abstimmung steht . Funktioniert außerdem git reset --soft HEAD^
identisch mit dem Soft-Reset in dieser früheren Antwort , da beide auf das erste übergeordnete Commit zurückgesetzt werden.
git reset
die Lösung hinzuzufügen , um eine Idee zu geben, eine Commit-Nachricht in mehrere Commit-Nachrichten aufzuteilen. Weil ich mit diesem Problem konfrontiert war, als ich anfing, es zu benutzen git
. Manchmal kann dies sehr hilfreich sein. :)
Auf diese Frage gibt es viele Antworten, aber keine erklärt ausführlich, wie ältere Commit-Nachrichten mit Vim geändert werden können . Ich war festgefahren, dies selbst zu tun, deshalb werde ich hier detailliert aufschreiben, wie ich dies speziell für Leute getan habe, die keine Erfahrung in Vim haben!
Ich wollte meine fünf letzten Commits ändern, die ich bereits auf den Server übertragen habe. Dies ist ziemlich "gefährlich", denn wenn jemand anderes bereits davon profitiert hat, können Sie die Dinge durcheinander bringen, indem Sie die Festschreibungsnachrichten ändern. Wenn Sie jedoch an Ihrem eigenen kleinen Zweig arbeiten und sicher sind, dass niemand daran gezogen hat, können Sie ihn folgendermaßen ändern:
Angenommen, Sie möchten Ihre fünf letzten Commits ändern und geben dies dann in das Terminal ein:
git rebase -i HEAD~5
* Wobei 5 die Anzahl der Festschreibungsnachrichten ist, die Sie ändern möchten (wenn Sie also die 10. bis zur letzten Festschreibung ändern möchten, geben Sie 10 ein).
Mit diesem Befehl gelangen Sie zu Vim. Dort können Sie Ihren Commit-Verlauf bearbeiten. Oben sehen Sie Ihre letzten fünf Commits wie folgt:
pick <commit hash> commit message
Stattdessen pick
musst du schreiben reword
. Sie können dies in Vim tun, indem Sie eingeben i
. Dadurch gelangen Sie in den Einfügemodus . (Sie sehen, dass Sie sich im Einfügemodus befinden, indem Sie das Wort INSERT unten verwenden.) Geben Sie für die Commits, die Sie ändern möchten, reword
anstelle von einpick
.
Dann müssen Sie diesen Bildschirm speichern und beenden. Sie tun dies, indem Sie zuerst durch Drücken der EscTaste in den Befehlsmodus wechseln (Sie können überprüfen, ob Sie sich im Befehlsmodus befinden, wenn das Wort INSERT unten verschwunden ist). Dann können Sie einen Befehl durch Eingabe eingeben :
. Der Befehl zum Speichern und Beenden lautet wq
. Wenn Sie also eingeben, sind :wq
Sie auf dem richtigen Weg.
Dann geht Vim jede Commit-Nachricht durch, die Sie umformulieren möchten, und hier können Sie die Commit-Nachrichten tatsächlich ändern. Sie tun dies, indem Sie in den Einfügemodus wechseln, die Festschreibungsnachricht ändern, in den Befehlsmodus wechseln und speichern und beenden. Tun Sie dies fünf Mal und Sie sind aus Vim!
Wenn Sie Ihre falschen Commits bereits gepusht haben, müssen Sie git push --force
sie überschreiben. Denken Sie daran, dass dies git push --force
eine ziemlich gefährliche Sache ist. Stellen Sie also sicher, dass niemand vom Server gezogen wird, da Sie Ihre falschen Commits ausgeführt haben!
Jetzt haben Sie Ihre Commit-Nachrichten geändert!
(Wie Sie sehen, bin ich in Vim nicht so erfahren. Wenn ich also den falschen Jargon verwendet habe, um zu erklären, was passiert, können Sie mich gerne korrigieren!)
<nitpick>
Es gibt keine "Threads" zu Stack Overflow, da es sich nicht um ein Diskussionsforum handelt, sondern nur um "Fragen", "Antworten" und "Beiträge". </nitpick>
. Außerdem sind nicht alle Versionen von Vim gleich. Mit nicht allen können Sie Zeichen im Einfügemodus löschen (macht in gewisser Weise Sinn, oder?). Wenn Sie immer in der Lage sein möchten, Zeichen in Vim zu löschen, X
und dies x
tun wird (kleine Löschzeichen x
vor dem Cursor X
werden dahinter gelöscht). Wenn Sie Fehler machen, können Sie diese u
wiederholt zum Rückgängigmachen verwenden. Schließlich r
ist Abkürzung für reword
im interaktiven Rebase-Editor.
cw
am Anfang eingegeben (obwohl die Frage nicht vim betrifft, stimme ich zu).
nano
einstellen , wie z. B. Midnight Commanders Mcedit.
Sie können git-rebase-reword verwenden
Es wurde entwickelt, um jedes Commit (nicht nur das letzte) auf die gleiche Weise zu bearbeiten wie commit --amend
$ git rebase-reword <commit-or-refname>
Es ist nach der Aktion auf Rebase Interactive benannt, um ein Commit zu ändern: "reword". Siehe diesen Beitrag und man- Abschnitt interaktiver Modus-
Beispiele:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
Folgendes eingeben : (Festschreiben und erneutes Basieren), das neue Festschreiben an die gewünschte Stelle verschieben, commit
zu f
( fixup
) ändern und speichern. Wenn Sie etwas schneller als das wollten, könnten Sie alias git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
Ich habe die Aliase hinzugefügt reci
und recm
dafür recommit (amend)
. Jetzt kann ich es machen mit git recm
oder git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
Mir wurde klar, dass ich ein Commit mit einem Tippfehler verschoben hatte. Um rückgängig zu machen, habe ich Folgendes getan:
git commit --amend -m "T-1000, advanced prototype"
git push --force
Warnung: Wenn Sie Ihre Änderungen erzwingen, wird der Remote-Zweig mit Ihrem lokalen Zweig überschrieben. Stellen Sie sicher, dass Sie nichts überschreiben, was Sie behalten möchten. Seien Sie auch vorsichtig, wenn Sie ein geändertes (umgeschriebenes) Commit erzwingen, wenn jemand anderes den Zweig mit Ihnen teilt, da er seinen eigenen Verlauf neu schreiben muss, wenn er die alte Kopie des Commits hat, die Sie gerade umgeschrieben haben.
Ich benutze gerne folgendes:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
Wenn Sie den Code nicht in Ihren Remote-Zweig ( GitHub / Bitbucket ) übertragen haben, können Sie die Commit-Nachricht in der Befehlszeile wie folgt ändern.
git commit --amend -m "Your new message"
Wenn Sie an einem bestimmten Zweig arbeiten, gehen Sie wie folgt vor:
git commit --amend -m "BRANCH-NAME: new message"
Wenn Sie den Code bereits mit der falschen Nachricht gepusht haben und beim Ändern der Nachricht vorsichtig sein müssen. Das heißt, nachdem Sie die Festschreibungsnachricht geändert und erneut versucht haben, Probleme zu verursachen, treten Probleme auf. Befolgen Sie diese Schritte, um den Vorgang zu vereinfachen.
Bitte lesen Sie meine gesamte Antwort, bevor Sie es tun.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Wichtiger Hinweis: Wenn Sie den Force Push direkt verwenden, können Codeprobleme auftreten, an denen andere Entwickler in demselben Zweig arbeiten. Um diese Konflikte zu vermeiden, müssen Sie den Code aus Ihrem Zweig ziehen, bevor Sie den Force-Push ausführen :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
Dies ist die beste Vorgehensweise beim Ändern der Festschreibungsnachricht, wenn diese bereits übertragen wurde.