Lorsque vous contribuez à un projet, certains développeurs demandent à ce que vous refactorisiez vos commits en un seul. J'ai vu ça récemment en parcourant les patches proposés pour Gogs, par exemple avec celui-ci : Fixes #3006: Markdown misinterpreting issue URLs.
Lorsque vous travaillez sur un patch, il est normal qu'il y ait plusieurs commits. Alors comment refactoriser un patch ?
Avant toute chose, j'espère que vous avez créé une branche spécifique pour votre patch, j'utilise ce modèle :
-
fix-blablabla
oufix-n
lorsqu'ils s'agit d'une correction d'un bug ; -
feat-blablabla
lorsqu'ils s'agit d'un ajout de fonctionnalité.
Pour cet exemple, on dira qu'on se trouve sur la branche feat-addons-support
.
Pour commencer, il faut savoir quand est-ce que votre patch a divergé de la branche principale. Si vous ne connaissez pas le nombre de commits, vous pouvez utiliser merge-base :
$ git merge-base feat-addons-support master
979054...
Ensuite, utilisez rebase pour modifier vos commits et les regrouper en un seul :
# Si vous connaissez le nombre de commits (disons 6)
$ git rebase -i HEAD~6
# Sinon
# git rebase -i <SHA-1>
$ git rebase -i 979054
Pour finir, forcez l'envoi des modifications :
$ git push -f