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 dépôt, il est déconseillé de rebaser des commits lorsque vous avez déjà poussé vers un dépôt. Pour savoir comment rebaser de façon sûre sur GitHub.com, consultez « À propos des fusions de demandes 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