Die beste Option ist die Verwendung von "Interaktiver Befehl rebase" .
Le site git rebase
Befehl ist unglaublich leistungsfähig. Er erlaubt Ihnen die Bearbeitung Commit-Meldungen , Commits kombinieren, neu anordnen usw.
Jedes Mal, wenn Sie einen Commit zurückbasen, wird ein neuer SHA für jeden Commit erstellt, unabhängig davon, ob der Inhalt geändert wird oder nicht! Sie sollten vorsichtig sein, wenn Sie diesen Befehl verwenden, denn er kann drastische Auswirkungen haben kann, besonders wenn Sie mit anderen Entwicklern zusammen Entwicklern zusammenarbeiten. Sie könnten anfangen, mit Ihrem Commit zu arbeiten, während Sie rebasieren. Nachdem Sie den Push der Commits erzwungen haben, sind sie nicht mehr synchronisiert und Sie können später eine unangenehme Situation herausfinden. Seien Sie also vorsichtig!
Es wird empfohlen, eine backup
Zweig vor dem Umbasieren so wenn Sie feststellen, dass die Dinge außer Kontrolle geraten sind, können Sie zum vorherigen Zustand zurückkehren.
Wie wird dieser Befehl nun verwendet?
git rebase -i <base>
-i
stehen für "interaktiv" . Beachten Sie, dass Sie eine Umbasierung im nicht-interaktiven Modus durchführen können, z. B:
#interactivly rebase the n commits from the current position, n is a given number(2,3 ...etc)
git rebase -i HEAD~n
HEAD
gibt Ihren aktuellen Standort an (kann auch der Name der Verzweigung oder der Commit SHA sein). Die ~n
bedeutet "n voré, also HEAD~n
ist die Liste der "n" Commits vor dem aktuellen Commit.
git rebase
hat verschiedene Befehle wie:
p
o pick
die Verpflichtung so beizubehalten, wie sie ist.
r
o reword
: um den Inhalt des Commits beizubehalten, aber die Commit-Nachricht zu ändern.
s
o squash
: um die Änderungen dieses Commits mit dem vorhergehenden Commit (dem in der Liste darüber) zu kombinieren.
-
... usw.
Hinweis: Es ist besser, Git mit Ihrem Code-Editor zu verwenden, um die Dinge zu vereinfachen. Wenn Sie zum Beispiel Visual Code verwenden, können Sie Folgendes hinzufügen git config --global core.editor "code --wait"
. Oder Sie können in Google suchen, wie Sie Ihren bevorzugten Code-Editor mit GIT verknüpfen können.
Beispiel für git rebase
Ich wollte die letzten 2 Commits, die ich gemacht habe, so ändern, dass ich wie folgt vorgehe:
-
Zeigt die aktuellen Übertragungen an:
#This to show all the commits on one line
$git log --oneline
4f3d0c8 (HEAD -> documentation) docs: Add project description and included files"
4d95e08 docs: Add created date and project title"
eaf7978 (origin/master , origin/HEAD, master) Inital commit
46a5819 Create README.md
-
Jetzt benutze ich git rebase
um die 2 letzten Commit-Meldungen zu ändern: $git rebase -i HEAD~2
Es öffnet den Code-Editor und zeigt dies an:
pick 4d95e08 docs: Add created date and project title
pick 4f3d0c8 docs: Add project description and included files
# Rebase eaf7978..4f3d0c8 onto eaf7978 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
...
Da ich die Commit-Nachricht für diese 2 Commits ändern möchte. Ich werde also eingeben r
o reword
anstelle von pick
. Speichern Sie dann die Datei und schließen Sie die Registerkarte. Beachten Sie, dass rebase
wird in einem mehrstufigen Prozess ausgeführt, so dass der nächste Schritt die Aktualisierung der Nachrichten ist. Beachten Sie auch, dass die Commits in umgekehrter chronologischer Reihenfolge angezeigt werden, d.h. der letzte Commit wird in dieser Zeile angezeigt und der erste Commit in der ersten Zeile und so weiter.
-
Aktualisieren Sie die Nachrichten: Aktualisieren Sie die erste Nachricht:
docs: Add created date and project title to the documentation "README.md"
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
...
speichern und schließen Bearbeiten Sie die zweite Nachricht
docs: Add project description and included files to the documentation "README.md"
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
...
speichern und schließen.
-
Am Ende des Umbaus erhalten Sie eine Meldung wie diese: Successfully rebased and updated refs/heads/documentation
was bedeutet, dass Sie Erfolg haben. Sie können die Änderungen anzeigen:
5dff827 (HEAD -> documentation) docs: Add project description and included files to the documentation "README.md"
4585c68 docs: Add created date and project title to the documentation "README.md"
eaf7978 (origin/master, origin/HEAD, master) Inital commit
46a5819 Create README.md
Ich wünsche mir, dass dies den neuen Benutzern hilft :).
52 Stimmen
Eine alternative Antwort finden Sie hier: stackoverflow.com/a/18150592/520567 Die von Ihnen akzeptierte Antwort ist eigentlich eine exakte Antwort auf Ihre Frage, aber wenn Sie Ihren neuen Commit schon fertig haben, bevor Sie sich entschlossen haben, edit zu verwenden, dann wäre diese Antwort einfacher. Es kann auch mit mehreren Commits funktionieren, die Sie zusammen mit einem älteren Commit zusammenführen/verschmelzen wollen.
7 Stimmen
Sie können auch einfach sehen Aufteilen einer Übertragung en Git-Tools - Geschichte neu schreiben für weitere Informationen.
1 Stimmen
Mögliches Duplikat von Wie kann man bestehende, nicht veröffentlichte Commits ändern?