Git permet de faire un squash de plusieurs commits. Le but du squash est de fusionner plusieurs commits pour n’en créer qu’un seul. L’arbre des commits sous GIT est ainsi épuré et la relecture de la pull-request est facilitée.
Le squash des commits peut être fait en ligne de commandes, mais dans le cas présent je vais vous expliquer pas à pas comment faire un squash de commits avec VSCode (Visual Studio Code) et l’extension Git graph.
——————————————————————-
Cette extension, Git graph, affiche une webview VSCode avec une vue graph des branches Git de votre répertoire. Elle permet aussi d’effectuer des opération GIT depuis le graph.
——————————————————————-
Lister vos commits git
Commençons par regarder nos commit de notre pull-request sous Bitbucket.

Comme vous pouvez le constater sur cette capture, j’ai commité et pushé 7 commits.
Pour avoir accès à cette liste de commits depuis l’extension Git graph, il vous suffit de :
- cliquer sur l’icone Source controle dans le menu de gauche
- Cliquer sur l’icone de graph
- Ensuite nous filtrons la vue sur la branche remote : origin/JIRA-20

Lancer le rebase avec VSCode et Git graph
Sous IntelliJ il fallait faire un clic droit sur le premier commit pour réaliser le squash des commits
Sous VSCode par contre, dans la vue de Git graph, il faut faire un clic droit sur le commit qui précède le premier commit fait sur la branche. Dans notre cas il s’agit de First commit.
Sélectionner l’option Rebase current branch on this commit…

Une nouvelle popin va s’ouvrir comme le montre la capture suivante, cocher Launch Interactive Rebase in new Terminal, ensuite cliquer sur Yes, rebase

Un terminal VSCode va s’ouvrir et afficher la liste des commits que nous allons fusionner.

Il faut ensuite à partir du deuxième commit remplacer pick par s (pour squash) comme le montre la capture d’écran qui suit.

On sauvegarde les modifications en effectuant l’ensemble des manipulations suivantes avec le clavier:
- Esc
- taper sur :wq
- Appuyer sur Entrer
Le terminal change pour afficher l’ensemble des commits messages. Le but est donc de ne laisser qu’un commit message.

Une fois l’édition finie, je sauvegarde les changements comme précédemment.
- Esc
- :wq
- Enter

Pusher les changements
VSCode va ensuite afficher un bouton pour synchroniser les changements (pull / push).
Il ne faut surtout pas cliquer dessus. Nous allons devoir faire un push (Force) afin que git réécrive l’historique des commits.

Activer l’option push (Force)
Si ce n’est pas déjà fait activer l’option git push (Force) dans les settings de VSCode.

Pour pusher les changement, accéder au menu des actions Git, ensuite pull, push et cliquer sur Push (Force)

Résultat du push
Si vous affichez de nouveau la vue git graph, il n’y a plus qu’un commit sur notre branche avec le nouveau commit message sauvegardé.

Il en est de même sous Bitbucket.
