Aller au contenu
Développement medium

Commit sur la mauvaise branche Git

9 min de lecture

Vous avez commité sur main alors que vous auriez dû être sur votre feature branch ? C'est l'un des problèmes Git les plus fréquents. La bonne nouvelle : rien n'est perdu. Ce guide vous montre comment déplacer vos commits vers la bonne branche selon trois scénarios : dernier commit, plusieurs commits, et modifications non commitées.

Prérequis : Les branches en bref et Cherry-pick.

  • Déplacer le dernier commit sur la bonne branche avec reset + cherry-pick
  • Déplacer plusieurs commits en chaîne vers une autre branche
  • Utiliser stash + switch pour interrompre proprement un travail en cours
  • Réorganiser des branches entières avec rebase --onto
SituationSolutionDifficulté
1 commit local sur la mauvaise branchebranch + resetFacile
Plusieurs commits locauxcherry-pick un par unMoyen
Série de commits à déplacerrebase --ontoAvancé
Modifications non commitées sur la mauvaise branchestash + switchFacile

Vous avez fait un commit sur main au lieu de feature/login :

main: A — B — C — D (votre commit par erreur)
  1. Créez la branche feature à partir de la position actuelle

    Fenêtre de terminal
    git branch feature/login

    La branche feature/login pointe maintenant sur le commit D.

  2. Reculez main d'un commit

    Fenêtre de terminal
    git reset --hard HEAD~1

    main revient au commit C. Le commit D existe toujours, il est sur feature/login.

  3. Basculez sur la bonne branche

    Fenêtre de terminal
    git switch feature/login

Résultat :

main: A — B — C
feature/login: A — B — C — D ✓

Vérification :

Fenêtre de terminal
git log --oneline -3
# D doit apparaître dans feature/login mais plus dans main

Vous avez fait 3 commits sur main qui auraient dû être sur feature/dashboard :

main: A — B — C — D — E — F
^-- ces 3 commits
  1. Notez les SHA des commits à déplacer

    Fenêtre de terminal
    git log --oneline -5

    Sortie :

    f1a2b3c (HEAD -> main) feat: page de stats
    d4e5f6a feat: graphiques dashboard
    a7b8c9d feat: layout dashboard
    1234567 fix: correction CSS
    abcdef0 feat: ajout header

    Les commits a7b8c9d, d4e5f6a et f1a2b3c doivent être déplacés.

  2. Créez et basculez sur la branche cible

    Fenêtre de terminal
    git switch -c feature/dashboard main~3

    Cela crée feature/dashboard à partir du commit juste avant les 3 commits erronés.

  3. Cherry-pick les commits dans l'ordre

    Fenêtre de terminal
    git cherry-pick a7b8c9d d4e5f6a f1a2b3c

    Ou avec une plage :

    Fenêtre de terminal
    git cherry-pick a7b8c9d^..f1a2b3c
  4. Revenez sur main et supprimez les commits

    Fenêtre de terminal
    git switch main
    git reset --hard HEAD~3

Vérification :

Fenêtre de terminal
git log --oneline --all --graph

Les 3 commits doivent apparaître sur feature/dashboard et avoir disparu de main.

Si les commits à déplacer forment une série continue et que la branche cible existe déjà, rebase --onto est plus élégant que plusieurs cherry-picks :

Fenêtre de terminal
git rebase --onto feature/dashboard main~3 main

Cette commande signifie : « prends les commits entre main~3 et main, et rejoue-les sur feature/dashboard ».

Vérification après le rebase :

Fenêtre de terminal
git log --oneline --all --graph
# Les commits doivent apparaître sur feature/dashboard
# main doit pointer sur le commit d'avant la série déplacée
git log main --oneline -3
# Confirme que main ne contient plus les commits déplacés

Vous avez commencé à modifier des fichiers mais pas encore commité, et vous réalisez que vous êtes sur la mauvaise branche.

Fenêtre de terminal
git stash
git switch feature/login
git stash pop

git stash range vos modifications dans un tiroir temporaire. stash pop les récupère sur la nouvelle branche.

Vérification :

Fenêtre de terminal
git status
# Les fichiers modifiés doivent apparaître comme "Changes not staged for commit"
# ou "Changes to be committed" selon leur état initial
git diff --stat
# Confirme que vos modifications sont bien sur la bonne branche

Encore plus simple, git switch -c emporte automatiquement les modifications non commitées :

Fenêtre de terminal
git switch -c feature/login

Vos fichiers modifiés suivent le changement de branche. Commitez-les normalement.

Git refuse de changer de branche quand vos modifications entrent en conflit avec la branche cible :

error: Your local changes to the following files would be overwritten by checkout

Solution : stashez d'abord, puis changez de branche :

Fenêtre de terminal
git stash
git switch feature/login
git stash pop
SituationCommandes
1 commit localgit branch featuregit reset --hard HEAD~1git switch feature
N commits locauxgit switch -c feature main~Ngit cherry-pick SHA1^..SHANgit switch maingit reset --hard HEAD~N
Série de commitsgit rebase --onto target main~N main
Modifs non commitéesgit stashgit switch branchgit stash pop
Nouvelle branchegit switch -c feature (les modifs suivent automatiquement)
SymptômeCause probableSolution
cherry-pick crée des conflitsLa branche cible a divergéRésolvez les conflits, puis git cherry-pick --continue
stash pop échoue avec conflitsModifications incompatibles entre branchesRésolvez les conflits, puis git stash drop
reset --hard a supprimé les commits sur mainCommit déjà poussé, les collègues sont cassésgit reflog + git reset --hard HEAD@{n} pour restaurer, puis utiliser revert
Les commits sont dupliqués (sur les 2 branches)Oublié le reset --hard sur la branche d'origineExécutez le reset --hard HEAD~N sur la branche source
rebase --onto n'a rien déplacéMauvais paramètres (plage vide)Vérifiez : git rebase --onto <cible> <début_exclu> <fin_inclue>
  • 1 commit local : créez la branche, puis reset --hard HEAD~1 sur la branche d'origine
  • Plusieurs commits : cherry-pick un par un ou par plage (SHA^..SHA)
  • Série continue : rebase --onto est plus élégant que N cherry-picks
  • Pas encore commité : git stash + git switch + git stash pop
  • Nouvelle branche : git switch -c feature emporte les modifs non commitées automatiquement
  • N'oubliez jamais le reset --hard sur la branche d'origine pour supprimer les commits dupliqués

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn