Git squash

N’y comprenant pas vraiment de quoi il retourne, j’ai fait quelques tests sur un dépôt de test, histoire de voir pratiquement ce qui ce passe. Donc j’ai fait 5 commits — sans les pousser sinon Olivier va me fâcher — et ensuite j’ai testé les deux commandes disponibles dans Sublime Merge.

État des commits avant le squash, mai 2021
État des commits avant le squash

La première, avoir sélectionné 4 des 5 commits, intitulés commit 1, commit 2, commit 3 et commit 4, j’ai lancé la commande Squash Selected Commits.

Résultat : Les 4 commits sont fusionnés, leurs messages de commit respectif étant également récupérés et fusionnés dans le commit résultant. Pratique pour rassembler plusieurs commits qui concernent la même feature.

État des commits après le squash, mai 2021
État des commits après le squash

Sublime Merge propose aussi une deuxième commande de ce type, intitulée Squash Selected Commits, ignoring new messages (fixup).

État des commits avant le squash fixup, mai 2021
État des commits avant le squash fixup

J’ai donc sélectionné le commit résultant de la commande précédente, intitulé commit 1, et le 5e intitulé Commit maousse costaud et lancé cette commande pour observer la différence avec la précédente.

Résultat : Les 2 commits sont fusionnés, par contre les messages du (ou des) plus récent(s) sont simplement ignorés. Pratique pour rassembler les « Oups » multiples qui suivent le commit initial.

État des commits après le squash fixup, mai 2021
État des commits après le squash fixup

Idéalement il faudrait que je sache comment refaire pareil en ligne de commande, sauf que… :-)

J’ai l’intuition qu’il s’agit d’un git rebase avec des tas d’options alambiquées, non ?


Un peut taquin j’ai quand même essayé de pousser 3 commits (A, B et C) avant de les fusionner :

État des commits après le squash, mai 2021
État des commits après le squash

Fatalement ça m’a créé une branche locale qui diverge de celle du dépôt distant (la distante contient toujours les 3 commits, A, B et C).

J’ai alors testé un git rebase —squash Github/master mais c’est sans effet alors j’ai fini par faire un merge banal et hop, c’est rentré dans l’ordre mais cette fois avec un commit supplémentaire résultant du merge.

État des commits après le merge, mai 2021
État des commits après le merge

Conclusion : avant le push on fait (à peu près) ce qu’on veut, après c’est crade :-p

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/14963

Haut de page