Einen Commit mit interaktivem Rebase entfernen
Für komplexere Verlaufsmanipulationen, wie das Entfernen eines Commits aus der Mitte eines Branches, können Sie den interaktiven Rebase (git rebase -i
) verwenden. Dies ist ein sehr mächtiger Befehl, der den Commit-Verlauf umschreibt, daher sollte er mit Vorsicht verwendet werden, insbesondere bei Branches, die mit anderen Entwicklern geteilt werden.
Unser Ziel ist es, den Commit mit der Nachricht "fix: Add a temporary file that should be removed" zu entfernen. Wenn wir uns den aktuellen Log ansehen, ist dieser Commit nun HEAD~3
.
Starten Sie den interaktiven Rebase-Prozess:
git rebase -i HEAD~4
Dieser Befehl öffnet Ihren Texteditor (standardmäßig vim) mit einer Liste der letzten 4 Commits.
pick fd5a181 fix: Add a temporary file that should be removed
pick 5f27a4d docs: Update documentation in file1
pick 284be6f chore: Add last-commit file again
pick 8a460c5 Revert "feat: Add file2.txt"
## Rebase 9403080..8a460c5 onto 9403080 (4 commands)
#
## Commands:
## p, pick <commit> = use commit
## d, drop <commit> = remove commit
## ...
Um den Commit zu entfernen, ändern Sie das Wort pick
in drop
(oder d
) für die Zeile, die "fix: Add a temporary file that should be removed" enthält.
Ändern Sie dies:
pick fd5a181 fix: Add a temporary file that should be removed
Zu diesem:
drop fd5a181 fix: Add a temporary file that should be removed
Drücken Sie in vim i
, um in den Einfügemodus zu wechseln, nehmen Sie Ihre Änderungen vor, und drücken Sie dann Esc
, um den Einfügemodus zu verlassen. Speichern und beenden Sie, indem Sie :wq
eingeben und Enter
drücken. Git wird die verbleibenden Commits auf den neuen Verlauf anwenden.
Überprüfen Sie den Log, um das Ergebnis zu sehen:
git log --oneline --graph
Der "schlechte" Commit ist nun aus dem Verlauf verschwunden.
* a5b4c3d (HEAD -> master) chore: Add last-commit file again
* f9e8d7c docs: Update documentation in file1
* 1e2d3f4 Revert "feat: Add file2.txt"
* 5e1a3b2 feat: Add file2.txt
* 1b4c0a9 feat: Add file1.txt
Überprüfen Sie auch die Dateien im Verzeichnis. Die Datei bad-commit-file.txt
wurde entfernt.
ls