Argh ! Ma fusion aurait dû attendre, je veux défaire mon merge

« Comment je fais si j’ai fait un merge et que j’aurai pas dû, ou que j’l’ai fait à l’envers ? ».  Eh bien tu l’annules pardi ! Voyons voir comment procéder pour annuler un merge…

Si jamais tu es déjà passé·e par notre cours « Git undo » tu verras que c’est plus une variante qu’une redite, après ça ne fait jamais de mal de voir et revoir les choses et en l’occurence ici ça nous permet de voir qu’avec Git on a souvent plusieurs moyens d’accéder au même résultat, et pour ce qui me concerne, peu importe le moyen que tu choisiras, c’est le résultat qui m’importe…

Quoi qu’il en soit je vais t’expliquer tout ça, et tu vas voir, c’est facile comme bonjour !

Comprendre les étapes

Je repars de mon historique avec master et dev qui divergent. Je veux alors fusioner dev dans master

Je gagne du temps pour ma fusion car HEAD est déjà positionné sur master comme ça il ne me reste plus qu’à lancer la fusion avec la commande git merge dev.

Mon merge produit un commit de fusion, c3 ici. Donc si je veux annuler ma fusion, il me suffit de revenir à l’état précédent de mon graphe en ramenant master en c2. Je vais donc faire ça en utilisant la commande git reset --keep master~1. master~1 est une syntaxe dite de révision et qui me permet, sans avoir à afficher mon historique et les identifiants des commits, de désigner le commit précédent de master sur sa ligne. J’aurais tout aussi bien pu faire un git reset --keep HEAD~1 ou HEAD@{1} ou master@{1} ou encore git reset--keep <SHA-1 de c2>, ça aurait fait exactement la même chose sur ce coup.

Bref, je lance donc mon reset et… TADA ! master revient bien un cran en arrière et je suis revenu à l’état précédent ma fusion. C’était vraiment dur, tu ne trouves pas ?

Bien utiliser Git merge vs rebase

Produire un historique cohérent et utile nécessite de savoir aussi bien nettoyer notre travail que fusionner des branches. Les commandes rebase et merge se complètent parfaitement quand on sait bien les utiliser…