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 ou fix-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