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 desquash
. - Déplacez la derniÚre validation (
7b36971
) avant la validation"Patch B"
(6b2481b
) et gardez-la commepick
. - Fusionnez la validation
"A fix for Patch B"
(c619268
) dans la validation"Patch B"
(6b2481b
) et ignorez le message de validation avecfixup
. - Fractionnez la troisiĂšme validation (
dd1475d
) en deux validations plus petites, avecedit
. - Corrigez le message de validation mal orthographiée (
4ca2acc
) avecreword
.
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.