Fusionner et Réorganiser les Commits Git : Guide Pratique

January 3, 2016

Aujourd’hui nous allons voir comment fusionner plusieurs commit ensemble pour n’en former qu’un seul.

Bien que cette manipulation soit relativement simple elle n’est pas souvent utilisé ce qui mène souvent a voir dans les branches master des commit sans ‘utilité’ fonctionnelle (commit de fix d’une erreur de syntaxe, plusieurs commit pour la même feature etc).

 

Pourquoi fusionner des commits dans git ?

Voyons tout d’abords les raisons qui peuvent nous amener a fusionner des commit :

 

Maintenant que nous avons vu les principales raisons pouvant nous amener a fusionner des commit ensemble nous allons voir la méthode pour les fusionner ensemble.

Comment fusionner des commits dans git ?

 

J’ai initialisé un dépôt git avec deux commit : l’un pour le création d’un fichier squash.txt et le second après avoir renommé le fichier en git-squash.txt comme nous pouvons le voir dans l’image ci dessous.  J’ai fais un troisieme commit afin d’avoir un rebase plus visible pour la seconde partie (il n’est absolument pas nécessaire)

git-squash-init

 

Etant donné que je travaille en local je souhaiterai fusionner ces deux commit. J’utilise donc la commande git rebase.

 

Pour cela je fais un git rebase -i HEAD~2   (git rebase, en mode interactif a partir des deux commit précédent le HEAD (inclus)).

git-squash-rebase

 

On voit donc nos commit (id et message) du plus vieux au plus récent dans un éditeur vim. Pour effectuer le rebase il faut modifier le fichier. Ici on veux fusionner le update (7cd2fe3) avec le précédent on remplace donc son pick par squash (l’option qui nous est utile).

git-squash-squash

Puis l’on enregistre les modification (option wq de vim). On obtient a nouveau l’éditeur vim avec les messages de nos commit a fusionner. On enregistre le nouveau commit avec son message en enregistrant comme lors de l’étape principale.  Pour modifier le message il suffit de l’éditer directement (les lignes avec les # sont des commentaires).

  A la fin nous obtenons donc les commit suivant :

git-squash-end

  Voila en espérant que cette astuce vous soit utile.

comments powered by Disqus