Skip to main content

Utilisation du rebasage Git en ligne de commande

Voici un petit tutoriel sur l’utilisation de git rebase sur la ligne de commande.

Utilisation du rebasage Git

Dans cet exemple, nous allons couvrir toutes les commandes git rebase disponibles, à l’exception de exec.

Nous allons commencer notre rebasage en entrant git rebase --interactive HEAD~7 sur le terminal. Notre éditeur de texte favori affiche les lignes suivantes :

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

Dans cet exemple, nous allons :

  • Écraser la cinquiĂšme validation (fa39187) dans la validation "Patch A" (1fc6c95), Ă  l’aide de squash.
  • DĂ©placez la derniĂšre validation (7b36971) avant la validation "Patch B" (6b2481b) et gardez-la comme pick.
  • Fusionnez la validation "A fix for Patch B" (c619268) dans la validation "Patch B" (6b2481b) et ignorez le message de validation avec fixup.
  • Fractionnez la troisiĂšme validation (dd1475d) en deux validations plus petites, avec edit.
  • Corrigez le message de validation mal orthographiĂ©e (4ca2acc) avec reword.

Ouf ! Cela peut sembler reprĂ©senter beaucoup de travail, mais en procĂ©dant une Ă©tape Ă  la fois, nous pouvons facilement apporter ces modifications.

Pour commencer, nous devons modifier les commandes du fichier pour qu’il ressemble à ceci :

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

Nous avons modifié la commande de chaque ligne de pick sur la commande qui nous intéresse.

Maintenant, enregistrez et fermez l’éditeur ; cela dĂ©marre le rebasage interactif.

Git ignore la premiĂšre commande de rebasage, pick 1fc6c95, car elle n’a rien Ă  faire. Il passe Ă  la commande suivante, squash fa39187. Étant donnĂ© que cette opĂ©ration nĂ©cessite votre entrĂ©e, Git ouvre Ă  nouveau votre Ă©diteur de texte. Le fichier qu’il ouvre ressemble Ă  ceci :

# This is a combination of two commits.
# The first commit's message is:

Patch A

# This is the 2nd commit message:

something to add to patch A

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#

Ce fichier est le moyen de Git de vous dire, « HĂ©, regardez ce que je suis sur le point de faire avec ce squash Â». Il rĂ©pertorie le premier message de validation ("Patch A") et le deuxiĂšme message de validation ("something to add to patch A"). Si vous ĂȘtes satisfait de ces messages de validation, vous pouvez enregistrer le fichier et fermer l’éditeur. Sinon, vous avez la possibilitĂ© de modifier le message de validation en modifiant simplement le texte.

Lorsque l’éditeur est fermĂ©, le rabasage continue :

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

Git traite les deux commandes pick (pour pick 7b36971 et pick 6b2481b). Il traite Ă©galement la commande fixup (fixup c619268), car elle ne nĂ©cessite aucune interaction. fixup fusionne les modifications apportĂ©es Ă  c619268 Ă  la validation avant celle-ci, 6b2481b. Les deux modifications auront le mĂȘme message de validation : "Patch B".

Git arrive Ă  l’opĂ©ration edit dd1475d, s’arrĂȘte et imprime le message suivant dans le terminal :

You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

À ce stade, vous pouvez modifier l’un des fichiers de votre projet pour apporter des modifications supplĂ©mentaires. Pour chaque modification que vous apportez, vous devez effectuer une nouvelle validation et vous pouvez le faire en entrant la commande git commit --amend. Lorsque vous avez terminĂ© d’apporter toutes vos modifications, vous pouvez exĂ©cuter git rebase --continue.

Git arrive ensuite à la commande reword 4ca2acc. Il ouvre votre éditeur de texte une fois de plus et présente les informations suivantes :

i cant' typ goods

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
# modified:   a
#

Comme prĂ©cĂ©demment, Git affiche le message de validation pour vous permettre de le modifier. Vous pouvez modifier le texte ("i cant' typ goods"), enregistrer le fichier et fermer l’éditeur. Git termine le rebasage et vous renvoie dans le terminal.

Envoi de code rebasé à GitHub

Étant donnĂ© que vous avez modifiĂ© l’historique Git, le git push origin habituel ne fonctionnera pas. Vous devez modifier la commande par « envoi forcĂ© » de vos derniĂšres modifications :

# Don't override changes
$ git push origin main --force-with-lease

# Override changes
$ git push origin main --force

Avertissement

L’envoi de force a des implications sĂ©rieuses, car il modifie la sĂ©quence historique des validations pour la branche. Utilisez cette option avec prudence, en particulier si votre rĂ©fĂ©rentiel est accessible par plusieurs personnes.

Pour aller plus loin