Git : fixup
Publié le :
Nous sommes sur notre branche de travail et nous avons fait plusieurs commits. Après relecture, on se rend compte qu’un commit précédent contient une erreur ou un oubli.
S’il s’agit du dernier commit, on peut utiliser git commit --amend pour modifier ce commit directement.
Mais si le commit à corriger n’est pas le dernier, on peut utiliser la commande git commit --fixup <commit-hash> pour créer un nouveau commit qui sera automatiquement fusionné avec le commit ciblé lors d’un rebase interactif avec l’option --autosquash.
Voici les étapes à suivre :
- Identifier le commit à corriger avec
git loget copier son hash. - Faire les modifications nécessaires dans le code.
- Ajouter les modifications avec
git add <fichier>ougit add . - Créer un commit de correction avec
git commit --fixup <commit-hash>. - Lancer un rebase interactif avec
git rebase -i --autosquash <commit-hash>^(le^indique de commencer le rebase juste avant le commit ciblé). - Git ouvrira un éditeur de texte avec la liste des commits. Le commit de correction sera marqué avec
fixupousquash. - Enregistrer et fermer l’éditeur pour appliquer le rebase. Git fusionnera automatiquement le commit de correction avec le commit ciblé.
- Si tout se passe bien, terminer le rebase avec
git rebase --continue. - Enfin, pousser les modifications sur le dépôt distant avec
git push --forcesi nécessaire (attention, cela réécrit l’historique).
La Documentation officielle de Git :
https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---fixupamendrewordcommit
Voici quelques ressources pour approfondir le sujet :
- https://www.atlassian.com/fr/git/tutorials/rewriting-history/git-fixup
- https://www.git-tower.com/learn/git/faq/git-fixup
- https://stackoverflow.com/questions/201325/how-can-i-amend-a-commit-with-git
- https://stackoverflow.com/questions/4158210/git-fixup-commit-without-interactive-rebase
- https://stackoverflow.com/questions/2770434/git-fixup-commit
- https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---fixupltcommitgt
- https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---autosquash
- https://www.git-tower.com/learn/git/faq/git-autosquash
- https://www.git-tower.com/learn/git/faq/git-rebase-interactive
- https://www.git-tower.com/learn/git/faq/git-rebase
- https://www.git-tower.com/learn/git/faq/git-amend
- https://www.git-tower.com/learn/git/faq/git-commit-amend
- https://www.git-tower.com/learn/git/faq/git-undo-commit
- https://www.git-tower.com/learn/git/faq/git-reset
- https://www.git-tower.com/learn/git/faq/git-revert
- https://www.git-tower.com/learn/git/faq/git-diff