En règle générale, vous devez utiliser git rebase
pour :
- Modifier les messages de commit précédents
- Combiner plusieurs commits en un seul
- Supprimer ou rétablir les commits qui ne sont plus nécessaires
Warning
Étant donné que la modification de votre historique de commit peut rendre les choses difficiles pour toute autre personne qui utilise le référentiel, il est déconseillé de rebaser des commits lorsque vous avez déjà poussé vers un référentiel. Pour savoir comment rebaser en toute sécurité, consultez « À propos des fusions de demande de tirage ».
Rebasage de commits par rapport à une branche
Pour rebaser tous les commits entre une autre branche et l’état de la branche actuelle, vous pouvez entrer la commande suivante dans votre shell (soit l’invite de commandes pour Windows, soit le terminal pour Mac et Linux) :
git rebase --interactive OTHER-BRANCH-NAME
Rebasage de commits par rapport à une limite dans le temps
Pour rebaser les quelques derniers commits dans votre branche actuelle, vous pouvez entrer la commande suivante dans votre shell :
git rebase --interactive HEAD~7
Commandes disponibles lors du rebasage
Six commandes sont disponibles lors du rebasage :
pick
pick
signifie simplement que le commit est inclus. La réorganisation de l’ordre des commandespick
modifie l’ordre des commits lorsque le rebasage est en cours. Si vous choisissez de ne pas inclure un commit, vous devez supprimer la ligne entière.reword
- La commande
reword
est similaire àpick
mais, une fois que vous l’avez utilisée, le processus de rebasage s’interrompt et vous donne la possibilité de modifier le message de commit. Les modifications apportées par le commit ne sont pas affectées. edit
- Si vous choisissez d’exécuter
edit
sur un commit, vous aurez la possibilité de modifier le commit, ce qui signifie que vous pouvez ajouter ou modifier entièrement le commit. Vous pouvez également effectuer davantage de commits avant de continuer le rebasage. Cela vous permet de fractionner un commit volumineux en plus petits, ou de supprimer des modifications erronées apportées dans un commit. squash
- Cette commande vous permet de combiner deux commits ou plus en un seul commit. Un commit est écrasé (squash) dans le commit qui le précède. Git vous donne la possibilité d’écrire un nouveau message de commit décrivant les deux modifications.
fixup
- Cette commande est similaire à
squash
, mais le commit à fusionner a son message ignoré. Le commit est simplement fusionné dans le commit qui le précède et le message du commit précédent est utilisé pour décrire les deux modifications. exec
- Cela vous permet d’exécuter des commandes shell arbitraires sur un commit.
Exemple d’utilisation de git rebase
Quelle que soit la commande que vous utilisez, Git lance votre éditeur de texte par défaut et ouvre un fichier qui détaille les commits dans la plage que vous avez choisie. Ce fichier ressemble un peu à ce qui suit :
pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B
# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
En examinant ces informations, de haut en bas, nous voyons que :
- Sept commits sont listés, ce qui indique qu’il y a eu sept changements entre notre point de départ et l’état de notre branche actuelle.
- Les commits que vous avez choisis de rebaser sont triés dans l’ordre des modifications les plus anciennes (en haut) aux modifications les plus récentes (en bas).
- Chaque ligne liste une commande (par défaut,
pick
), le SHA de commit et le message de commit. L’ensemble de la procéduregit rebase
est axé sur votre manipulation de ces trois colonnes. Les modifications que vous apportez sont rebasées sur votre dépôt. - Après les commits, Git vous indique la plage de commits que nous utilisons (
41a72e6..7b36971
). - Enfin, Git fournit de l’aide en vous indiquant les commandes à votre disposition lors du rebasage de commits.