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
Avertissement
Ă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.