Supprimer un commit avec le rebase interactif
Pour une manipulation plus complexe de l'historique, comme la suppression d'un commit au milieu d'une branche, vous pouvez utiliser le rebase interactif (git rebase -i
). C'est une commande très puissante qui réécrit l'historique des commits, elle doit donc être utilisée avec prudence, en particulier sur les branches partagées avec d'autres développeurs.
Notre objectif est de supprimer le commit avec le message "fix: Add a temporary file that should be removed". En regardant le log actuel, ce commit est maintenant HEAD~3
.
Lancez le processus de rebase interactif :
git rebase -i HEAD~4
Cette commande ouvrira votre éditeur de texte (vim par défaut) avec une liste des 4 derniers 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
## ...
Pour supprimer le commit, changez le mot pick
en drop
(ou d
) pour la ligne contenant "fix: Add a temporary file that should be removed".
Changez ceci :
pick fd5a181 fix: Add a temporary file that should be removed
En ceci :
drop fd5a181 fix: Add a temporary file that should be removed
Dans vim, appuyez sur i
pour entrer en mode insertion, effectuez vos modifications, puis appuyez sur Esc
pour quitter le mode insertion. Enregistrez et quittez en tapant :wq
et en appuyant sur Entrée
. Git rejouera les commits restants sur la nouvelle histoire.
Vérifiez le log pour voir le résultat :
git log --oneline --graph
Le commit "indésirable" a maintenant disparu de l'historique.
* 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
Vérifiez également les fichiers dans le répertoire. Le fichier bad-commit-file.txt
a été supprimé.
ls