Skip to main content

À propos de git rebase

La commande git rebase vous permet de changer facilement une sĂ©rie de commits, en modifiant l’historique de votre dĂ©pĂŽt. Vous pouvez effectuer la rĂ©organisation, la modification ou le squash des commits de maniĂšre groupĂ©e.

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 commandes pick 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Ă©dure git 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.

Pour aller plus loin