Fusionner plusieurs commits d’une feature branche vers master

Quand on travaille sur une branche de développement en parallèle et qu’on souhaite déporter son travail sur la branche master on a deux manières de le faire. La première, -plus simple-, consiste à faire un merge à partir de master alors que la seconde, -plus difficile-, consiste à faire un rebase (en renommant, fusionnant les commits au passage).

Méthode 1 : Facile

On se place sur la branche master et on met à jour les données

git checkout master
git fetch
git pull

On merge la branche dérivée depuis master

git merge feature_branch

On annule toutes les modifications faites sur la branche dérivée (de manière soft/mixed)

git reset origin/master

Toutes les modifications annulées se mettent ‘fichiers modifiés’
A partir de la on peut créer un nouveau commit et pusher le tout
On a donc toutes les modifications faites dans la branche dérivée en un seul commit dans master.

git add --all
git commit

Méthode 2 : Difficile

Le squash commit n’est pas toujours simple, c’est pour ça qu’on va commencer par dériver une branche spécialement pour cette manipulation (on ne sait jamais!…). Pour squasher tous les commits depuis le dernier commit en commun avec master :

git checkout -b squashed_feature
git rebase -i master

L’éditeur s’ouvre avec les liste des commits

pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3

Les commits sont classés par ordre d’ancienneté (le plus ancien se trouve tout en bas de la liste). On va donc garder commit 1 (qui représente la dernière version du code), dans lequel on va squasher les autres, on ajoute donc le mot-clé “squash” devant chacun d’eux :

pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3

Si on supprime une ligne, le commit sera ignoré, et perdu. Après avoir enregistré, l’éditeur s’ouvre à nouveau et demande un message pour le nouveau squash commit.

Voilà, il ne reste plus qu’à merger l’unique commit de la branche squashed_feature vers master.

git checkout master
git merge squashed_feature