• 12 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 26/08/2019

Modifiez vos branches avec Rebase

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Comment fonctionne Git rebase ?

Git rebase a le même objectif que Git merge. Ces deux commandes permettent de transférer les changements d'une branche à une autre.  Seule la manière de procéder va différer. Le rebase dispose de puissantes fonctionnalités de réécriture de l'historique. Il existe deux types de rebase : le rebase manuel et le rebase interactif. Au niveau du contenu, le rebase consiste à changer la base de votre branche d'un commit vers un autre, donnant l'illusion que vous avez créé votre branche à partir d'un commit différent. Git va prendre vos modifications d'une branche et les transposer sur une autre branche.

Rebaser est une méthode courante pour intégrer les changements en amont dans votre répertoire local. L'intégration des changements en amont avec Git merge génère un commit de merge superflu dès que vous voulez voir comment le projet a évolué.

Cela remplacerait les anciens commits du dépôt public, et cela  serait comme si votre historique avait brusquement disparu !

La commande  git rebase  standard appliquera les commits à votre branche courante puis à la pointe de la branche transférée. 

Réécrivez l’historique avec l’interactif Rebase de Git

Exécuter  git rebase  avec l'option -i démarre une session de rebasage interactive. Cette fonctionnalité permet de déplacer les commits un à un en ayant la possibilité de les modifier. Vous avez donc la possibilité de supprimer certains commits ou de les modifier. Cette action ouvre un éditeur dans lequel vous pouvez entrer des commandes  pour chaque commit à rebaser. 

Voici les commandes possibles :

# Commandes :
# p, pick = utilisez le commit
# r, reword = utilisez le commit, mais éditez le message de commit
# e, edit = utilisez le commit, mais arrêtez-vous pour apporter des changements
# s, squash = utilisez le commit, mais intégrez-le au commit précédent
# f, fixup = commande similaire à "squash", mais qui permet d'annuler le message de log de ce commit
# x, exec = exécutez la commande (le reste de la ligne) à l'aide de Shell 
# d, drop = supprimez le commit

Le rebasage interactif vous donne donc un contrôle complet sur l'historique de votre projet. Il sert principalement à nettoyer son historique. Il est beaucoup apprécié des développeurs qui aiment nettoyer leurs historiques avant de pousser sur le dépôt distant.

Modifiez l'ordre des commits

Décidément, vous voulez en faire des choses. o_O  Modifier l'ordre des commits peut être utile lors d'un nettoyage avant un push sur le serveur distant. Le rebase interactif permet de le faire. Eh oui, on peut vraiment tout faire avec lui. :)

Cela est très simple à mettre en place. Le rebase interactif vous ouvre une fenêtre pour chaque commit à rebaser. Pour chacun de ces commits, vous allez devoir choisir une option dans la liste des commandes que nous avons vues.

# Commandes :
# p, pick = utilisez le commit
# r, reword = utilisez le commit, mais éditez le message de commit
# e, edit = utilisez le commit, mais arrêtez-vous pour apporter des changements
# s, squash = utilisez le commit, mais intégrez-le au commit précédent
# f, fixup = commande similaire à "squash", mais qui permet d'annuler le message de log de ce commit
# x, exec = exécutez la commande (le reste de la ligne) à l'aide de Shell 
# d, drop = supprimez le commit

Par exemple, vous avez trois commits ; on va faire simple, ils s’appelleront commit1,  commit2 et commit3. C'était difficile, comme noms ! :pImaginons que vous deviez mettre le commit2 avant le commit1 et que vous vouliez supprimer le commit3. On va faire un rebase interactif sur nos trois derniers commits  :

$ git rebase -i HEAD~3

Puis vous utiliserez la commande Pick pour indiquer à Git dans quel ordre vous les voulez, et la commande Drop pour la suppression du commit3.

drop 58gfbg56 commit3
pick 14hg58g1 commit2
pick 25frgf83 commit1

Modifiez les messages de validation

La commande Git rebase interactif permet aussi de modifier les messages de commit. Imaginons que nous voulions agir sur le dernier commit.

git rebase -i HEAD^

Pour modifier ensuite son message de validation, nous allons utiliser la commande Edit.

edit 54dfiosd  

Vous allez devoir sauvegarder et quitter l'éditeur. Vous aurez alors une ligne de commande vous indiquant :

$ git rebase -i HEAD^
Stopped at 54dfiosd... updated the gemspec to hopefully work better
You can amend the commit now, with

 git commit --amend

Once you’re satisfied with your changes, run

 git rebase --continue

Vous devrez alors faire :

 git commit --amend

Puis modifier votre message de commit et enfin valider en faisant :

$ git rebase --continue

Le rebase est très pratique pour modifier vos branches, comme nous venons de le voir, mais il est aussi très utile pour les nettoyer ! Voyons cela dans le chapitre suivant !

Exemple de certificat de réussite
Exemple de certificat de réussite