Je vais vous expliquer ce qu’est un rebase dans GIT, et comment effectuer un rebase dans VSCode.
Lorsque plusieurs personnes collaborent sur un projet, il arrive souvent qu’une pull-request ne peut être mergé du à des conflits car plusieurs personnes ont modifié les mêmes fichiers.
Pour résoudre ces conflits nous allons faire un rebase de la branche de l’utilisateur sur la master.
Qu’est ce qu’un rebase ?
Le rebase va permettre de déplacer le point de départ de la branche de l’utilisateur vers le dernier commit de la master. On peut considérer un rebase comme une mise à jour de la branche de l’utilisateur en important / fusionnant les commits de la master sur la branche de l’utilisateur.
Votre branche sera donc à jour par rapport à la master.
L’exemple suivant permet de bien visualiser le changement qu’apporte un rebase.
Sur l’arbre GIT de gauche, notre branche JIRA-30, en jaune, démarre du cercle rouge.
Depuis son départ, il y a deux nouveaux commits (flèches rouges) sur la branche master qui correspondent à des merges de pull-request.
Notre branche JIRA-30 n’est donc plus à jour.
Grace au rebase nous allons déplacer le cercle rouge vers la dernière flèche rouge pour obtenir le résultat de la deuxième capture. On constate que les commit1 à 5 se retrouve bien après le dernier commit sur la branche master (cercle rouge).
Sur la troisième image un squash des commits a été effectué avant pour faciliter le rebase et pour des questions de clarté.
Lancer le rebase
Avant de commencer je vous conseille de squasher vos commits avec VSCode, car comme vous l’avez vu dans la capture précédente le lisibité est meilleure et le rebase sera plus simple.
Depuis VSCode, assurez vous de travailler sur votre branche, JIRA-30 dans cet exemple.
- Ouvrez la vue Source control
- Cliquer sur les … en haut de la vue
- Branch
- Rebase branch
Dans la nouvelle vue qui s’ouvre sélectionner origin/master
Résoudre les conflits
Si vous n’avez pas fait au préalable de squash de vos commits, vous aurez très certainement beaucoup de conflits à résoudre. Avec un squash il n’y aura qu’un seul conflit à résoudre.
Vous pouvez avoir autant de conflits que des commits sur votre branche. C’est pour cette raison que je préfère au préalable effectuer un squash des commits de ma branche.
La capture suivante indique que j’ai un conflit à résoudre sur le fichier index.ts
Je clique sur index.ts et résous mes conflits (généralement il faut faire un Both change et corriger le code). Une fois le conflit résolu je clique sur le signe + pour ajouter le ficher à GIT (git add).
Ensuite j’ouvre le terminal VSCode et je tape:
git rebase --continue
Je continue ainsi de suite à résoudre l’ensemble des conflits jusqu’à ne plus avoir marqué rebasing dans la toolbar bleu de VSCode et que VSCode me propose de synchroniser mes changements.
Il ne faut en aucun cas cliquer sur le bouton bleu Sync Changes
Pusher les changements
Une fois les conflits résolus, nous allons pusher les changements. Etant donné que nous allons réécrire l’historique GIT il faut faire un push (Force)
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, le point de départ de notre branche a changé. Il correspond au dernier commit sur la branche master.