Passer au contenu
GitTree
Guides Git7 minutes de lecture

Branche de rebase Git : comment rebaser en toute sécurité, étape par étape

Le rebasage prend une commande. Pour le faire en toute sécurité, il faut en faire quelques autres : sauvegarder l'ancienne astuce, gérer chaque conflit, comparer le résultat et pousser sans écraser un coéquipier. Voici toute la séquence.

Écrit par Kodmora

L'éditeur de logiciels derrière GitTree

Mis à jour
  • Rebase
  • Branches
  • Fusionner les conflits
  • Dépôts distants et push
Sur cette page

Pour rebaser une branche, récupérez-la, basculez-y et relisez-la sur la nouvelle base : `git fetch origin`, `git switch topic`, `git rebase origin/main`. Git met de côté les propres commits de votre branche, déplace la branche jusqu'à la pointe de origin/main, puis réapplique les commits un par un. L'historique reste une ligne droite sans validation de fusion. Chaque commit rejoué reçoit un nouveau hachage, donc une branche que vous avez déjà poussée a besoin de git push --force-with-lease par la suite.

Que fait git rebase à une branche ?

Supposons que topic ait ses propres commits et que main en ait gagné trois depuis le démarrage de la branche. Le rebasage met à jour ce point de départ sans fusionner main dans votre branche :

# before
A---B---C---D---E   origin/main
     \
      F---G         topic

# after git rebase origin/main
A---B---C---D---E   origin/main
                 \
                  F'---G'   topic

F' et G' contiennent les mêmes modifications et messages que F et G, mais ce sont de nouveaux commits avec de nouveaux hachages, car leurs parents ont changé. Une fusion à partir du même point de départ conserverait les deux lignes et ajouterait un commit avec deux parents. La leçon sur fusion versus rebase montre les deux sur un seul graphique.

Comment rebaser une branche en toute sécurité, étape par étape ?

Inspectez d’abord, conservez l’ancienne astuce, rejouez, puis testez. Les trois premières commandes ne réécrivent rien :

# 1. update origin/main, your files stay as they are
git fetch origin

# 2. list the commits Git will replay
git log --oneline origin/main..topic

# 3. keep a name on the old tip
git branch topic-backup topic

# 4. replay
git switch topic
git rebase origin/main

Arrêtez-vous à l'étape 2 si la liste contient un commit que vous ne reconnaissez pas, car cela signifie que la branche n'a pas commencé là où vous le pensiez. Une fois le rebase terminé, exécutez git status pour confirmer qu'il est terminé, puis exécutez vos tests. Un rebase sans conflits peut toujours perturber le comportement.

Nommez la base à chaque fois. Un simple git rebase utilise l'amont de la branche, qui est souvent origin/topic et non main. Pour déplacer une branche démarrée à partir d'une autre branche de fonctionnalités, nommez également l'ancienne base : git rebase --onto main old-base topic. La leçon sur le rebasage de travaux non publiés met en pratique cela sur un vrai graphique.

Comment résoudre les conflits lors d’un rebase ?

Git applique vos commits un par un, afin qu'il puisse s'arrêter plusieurs fois, même dans les mêmes lignes. Corrigez uniquement le commit sur lequel Git s'est arrêté, puisque les derniers n'ont pas encore été appliqués :

# edit the file and remove the conflict markers, then
git add path/to/file
git rebase --continue
Les trois façons de répondre à un stop de rebase
CommandeCe que ça faitUtilisez-le quand
git rebase --continueEnregistre le résultat intermédiaire et passe à la validation suivante.Le conflit est résolu et indexé.
git rebase --skipSupprime le commit en cours de relecture.Vous avez confirmé que le changement est déjà en amont.
git rebase --abortArrête et ramène la branche là où elle se trouvait.Vous avez choisi la mauvaise base ou la mauvaise branche, ou le conflit nécessite plus de réflexion.

Si vous rejouez souvent le même conflit, git config rerere.enabled true enregistre votre résolution et la réutilise. Vérifiez chaque résultat réutilisé, car la réponse d’hier peut être fausse dans le code d’aujourd’hui. La leçon sur continuer, sauter et abandonner passe en revue chaque cas, et comment résoudre les conflits de fusion couvre la lecture des marqueurs.

Comment vérifier un rebase avant le push ?

Comparez l’ancienne série avec la nouvelle avant que quiconque ne la voie :

# old and new commits, matched pair by pair
git range-diff origin/main topic-backup topic

# everything the branch adds to main, as one diff
git diff origin/main...topic

# the shape of the history
git log --graph --oneline --decorate origin/main topic

git range-diff indique lorsqu'une résolution de conflit a modifié un correctif ou lorsqu'un commit a disparu. Le code qui compile peut toujours masquer un test abandonné ou une condition modifiée, et c'est ici que vous l'attrapez.

Comment annuler un rebase ?

Pendant qu'il est en cours d'exécution, utilisez git rebase --abort. Une fois terminé, remettez la branche vers l’ancienne pointe. Vérifiez d'abord git status, car --hard ignore les modifications non validées :

git reset --hard topic-backup

# no backup? find the old tip in the reflog
git reflog show topic
git reset --hard <old-tip-hash>

Le guide pour annuler une réinitialisation, un rebase ou un commit couvre le reflog plus en profondeur.

Comment faire un push après un rebase ?

Un push normal est refusé, car la branche distante contient toujours les anciens commits et Git voit une mise à jour sans avance rapide. Vérifiez ce que vous êtes sur le point de remplacer, puis lancez un bail :

git fetch origin
git log --oneline topic..origin/topic
git push --force-with-lease origin topic

Ce git log ne devrait répertorier que vos anciens commits. Tout le reste est le travail d’un coéquipier, alors arrêtez-vous et apportez-le en premier. --force-with-lease remplace la branche distante uniquement si elle se trouve toujours là où votre dernière récupération l'a vue, et --force n'a pas de vérification de ce type. Les récupérations en arrière-plan mettent à jour cette valeur, afin que les scripts puissent nommer le commit qu'ils attendent : git push --force-with-lease=topic:<expected-hash> origin topic.

Dois-je rebaser ou fusionner cette branche ?

Rebase ou fusion, par situation
SituationUtiliserPourquoi
Votre propre branche thématique éphémèreRebaseUn historique simple qui se lit commit par commit.
Une branche que d'autres ont récupérée ou sur laquelle ils ont construitFusionnerIl ne réécrit rien, donc personne n'a à réparer son travail.
Une filière intégration pérenneFusionnerIl conserve la trace des deux axes de développement.
Une branche à l'étudeRebase, une fois que les évaluateurs sont d'accordLes commentaires peuvent pointer vers des commits sur le point de changer.

Comment rebaser une branche dans GitTree

  1. Choisissez la nouvelle base

    Vérifiez votre branche, cliquez avec le bouton droit sur la branche sur laquelle vous souhaitez travailler, telle que develop, et choisissez Rebase … onto ….

  2. Vérifiez les options

    La confirmation indique que chaque commit est relu avec un nouvel identifiant et que l'ancienne branche est conservée. Vous pouvez également stocker les modifications locales et les restaurer.

  3. Suivez chaque étape

    Une bannière affiche Rebasing … onto …, step … of …. Si une étape est en conflit, Resolve ouvre les fichiers, Continue continue, Skip supprime cette validation et Abort… remet la branche telle qu'elle était.

  4. Examinez ce qui a changé

    What Changed… (Alt+D) compare les commits avant et après le rebase, paire par paire, comme git range-diff.

  5. Appuyer ou annuler

    Utilisez Force Push (With Lease)… pour une branche déjà sur le dépôt distant. Undo ramène la branche là où elle se trouvait et les anciens commits sont conservés sous refs/ogt/trash.

Une étape arrêtée dans GitTree : les deux côtés, la sortie, ainsi que Continuer et Abandonner dans la bannière.
Une étape arrêtée dans GitTree : les deux côtés, la sortie, ainsi que Continuer et Abandonner dans la bannière.

Le guide pour rebaser une branche propose toutes les options, et forcer le push avec bail couvre le push. Pour écraser, reformuler ou réorganiser en cours de route, lisez rebase interactif dans une interface graphique.

L'éditeur de rebase interactif dans GitTree affiche chaque commit qui sera relu avant que quoi que ce soit ne change.
L'éditeur de rebase interactif dans GitTree affiche chaque commit qui sera relu avant que quoi que ce soit ne change.

Questions fréquemment posées

Est-ce que git rebase perd les modifications ?

Pas tout seul. Git rejoue vos modifications dans de nouveaux commits. Le travail disparaît lorsque vous supprimez un commit, exécutez git rebase --skip ou résolvez un conflit de la mauvaise manière. Git laisse également de côté les commits dont les modifications sont déjà en amont.

Quelle est la différence entre git rebase --abort et le reflog ?

git rebase --abort ne fonctionne que lorsqu'un rebase est en cours. Une fois terminé, le reflog conserve les astuces précédentes de la branche, vous pouvez donc réinitialiser l'une d'entre elles.

Puis-je rebaser une branche qui contient des commits de fusion ?

Oui. git rebase --rebase-merges origin/main les conserve. Sans cette option, Git aplatit la branche et laisse les validations de fusion de côté.

Pourquoi git push échoue-t-il après un rebase ?

La branche distante contient toujours les anciens commits, que votre branche réécrite ne contient pas. Vérifiez-les, puis utilisez git push --force-with-lease origin topic.

Dois-je rebaser sur main ou origin/main ?

Utilisez origin/main après git fetch origin. Il s'agit du dernier état publié et vous n'avez pas besoin de mettre à jour votre main local au préalable.

Sources

Les allégations concernant d'autres produits ont été vérifiées par rapport à leurs pages officielles sur 7 novembre 2026. Les prix et les fonctionnalités changent ; les pages des fournisseurs sont la source de vérité.