Les autres réponses suggérant de vérifier l'autre branche, puis de s'y engager, ne fonctionnent que si la vérification est possible compte tenu des modifications locales. Si ce n'est pas le cas, vous êtes dans le cas d'utilisation le plus courant de git stash
:
git stash
git checkout other-branch
git stash pop
Le premier stash
cache vos changements (en fait, il s'agit d'un commit temporaire), et la commande suivante stash pop
les réapplique. Cela permet à Git d'utiliser ses capacités de fusion.
Si, lorsque vous essayez d'ouvrir la cachette, vous rencontrez des conflits de fusion... les étapes suivantes dépendent de la nature de ces conflits. Si tous les changements cachés appartiennent effectivement à cette autre branche, vous devrez simplement les trier - c'est une conséquence du fait d'avoir fait vos changements sur la mauvaise branche.
D'un autre côté, si vous avez vraiment fait une erreur, et que votre arbre de travail contient un mélange de changements pour les deux branches, et que les conflits ne concernent que ceux que vous voulez renvoyer sur la branche d'origine, vous pouvez économiser du travail. Comme d'habitude, il y a beaucoup de façons de le faire. En voici une, à partir du moment où vous faites un pop et voyez les conflits :
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
Alternativement, si vous vous rendez compte à l'avance que cela va se produire, il suffit de livrer les choses qui appartiennent à la branche actuelle. Vous pouvez toujours revenir et modifier ce commit :
git add -p
git commit
git stash
git checkout other-branch
git stash pop
Et bien sûr, rappelez-vous que tout cela a demandé un peu de travail, et évitez-le la prochaine fois, peut-être en mettant le nom de votre branche actuelle dans votre invite en ajoutant $(__git_ps1)
à votre PS1 dans la variable d'environnement de votre bashrc fichier. (Voir par exemple le Git en Bash documentation.)