{"meta":{"title":"Utilisation du rebasage Git en ligne de commande","intro":"Voici un petit tutoriel sur l’utilisation de git rebase sur la ligne de commande.","product":"Bien démarrer","breadcrumbs":[{"href":"/fr/get-started","title":"Bien démarrer"},{"href":"/fr/get-started/using-git","title":"Utilisation de Git"},{"href":"/fr/get-started/using-git/using-git-rebase-on-the-command-line","title":"Le rebase Git"}],"documentType":"article"},"body":"# Utilisation du rebasage Git en ligne de commande\n\nVoici un petit tutoriel sur l’utilisation de git rebase sur la ligne de commande.\n\n## Utilisation de Git rebase\n\nDans cet exemple, nous allons couvrir toutes les commandes `git rebase` disponibles, à l’exception de `exec`.\n\nNous allons commencer notre rebasage en entrant `git rebase --interactive HEAD~7` sur le terminal. Notre éditeur de texte favori affiche les lignes suivantes :\n\n```text\npick 1fc6c95 Patch A\npick 6b2481b Patch B\npick dd1475d something I want to split\npick c619268 A fix for Patch B\npick fa39187 something to add to patch A\npick 4ca2acc i cant' typ goods\npick 7b36971 something to move before patch B\n```\n\nDans cet exemple, nous allons :\n\n* Écraser le cinquième commit (`fa39187`) dans le commit `\"Patch A\"` (`1fc6c95`), à l’aide de `squash`.\n* Déplacez la dernière validation (`7b36971`) avant la validation `\"Patch B\"` (`6b2481b`) et gardez-la comme `pick`.\n* Fusionnez la validation `\"A fix for Patch B\"` (`c619268`) dans la validation `\"Patch B\"` (`6b2481b`) et ignorez le message de validation avec `fixup`.\n* Fractionnez la troisième validation (`dd1475d`) en deux validations plus petites, avec `edit`.\n* Corrigez le message de commit mal orthographié (`4ca2acc`) avec `reword`.\n\nOuf ! Cela peut sembler représenter beaucoup de travail, mais en procédant une étape à la fois, nous pouvons facilement apporter ces modifications.\n\nPour commencer, nous devons modifier les commandes du fichier pour qu’il ressemble à ceci :\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nNous avons modifié la commande de chaque ligne de `pick` en la commande qui nous intéresse.\n\nMaintenant, enregistrez et fermez l’éditeur ; cela démarre le rebasage interactif.\n\nGit 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 :\n\n```text\n# This is a combination of two commits.\n# The first commit's message is:\n\nPatch A\n\n# This is the 2nd commit message:\n\nsomething to add to patch A\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nCe 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.\n\nLorsque l’éditeur est fermé, le rabasage continue :\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nGit 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.\n`fixup` fusionne les modifications de `c619268` dans le commit précédent, `6b2481b`. Les deux modifications auront le même message de validation : `\"Patch B\"`.\n\nGit arrive à l’opération `edit dd1475d`, s’arrête et imprime le message suivant dans le terminal :\n\n```shell\nYou can amend the commit now, with\n\n        git commit --amend\n\nOnce you are satisfied with your changes, run\n\n        git rebase --continue\n```\n\nÀ 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`.\n\nGit arrive ensuite à la commande `reword 4ca2acc`. Il ouvre votre éditeur de texte une fois de plus et présente les informations suivantes :\n\n```text\ni cant' typ goods\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD^1 <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nComme 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.\n\n## Envoi (push) du code redéployé vers GitHub\n\nÉ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 :\n\n```shell\n# Don't override changes\n$ git push origin main --force-with-lease\n\n# Override changes\n$ git push origin main --force\n```\n\n> \\[!WARNING]\n> 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.\n\n## Pour aller plus loin\n\n* [Résolution des conflits de fusion après un rebasage Git](/fr/get-started/using-git/resolving-merge-conflicts-after-a-git-rebase)"}