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. Sinon, vous êtes dans le plus commun pour les cas d'utilisation git stash
:
git stash
git checkout other-branch
git stash pop
Le premier stash
se cache vos modifications (essentiellement faire commettras temporaire), et la stash pop
ultérieure les re-CANDIDATURE. Cela permet à git d'utiliser ses capacités de fusion.
Si vous essayez de faire apparaître la mémoire, vous êtes confronté à des conflits de fusion ... les étapes suivantes dépendent de ces conflits. Si tous les changements cachés appartiennent effectivement à cette autre branche, vous devrez simplement les trier - c'est une conséquence d'avoir fait vos changements sur la mauvaise branche. D'autre part, si vous avez vraiment raté, et que votre arbre de travail a un mélange de changements pour les deux branches, et que les conflits sont juste ceux que vous voulez commettre sur la branche d'origine, vous peut sauver du travail. Comme d'habitude, il y a beaucoup de façons de le faire. Voici une, à partir après avoir pop et de voir 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
Sinon, si vous vous rendez compte à l'avance le temps que cela va se produire, commettre simplement 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 pris un peu de travail, et d'éviter la prochaine fois, peut-être en mettant votre nom de la branche en cours dans votre message en ajoutant $(__git_ps1)
à votre PS1 dans votre bashrc. (Voir par exemple les docs Git in Bash.)
Lorsque vous avez dit: 'Extraire la branche et la valider ne fonctionnerait que si la vérification est possible compte tenu des modifications locales '. Que voulez-vous dire? Cela vous dérangerait-il de donner/discuter d'un exemple simple quand cela échouerait? –
@ user815423426 Si vous avez des modifications non validées, vous pouvez extraire une autre branche si et seulement si l'ensemble de fichiers que vous avez modifié et l'ensemble des fichiers qui diffèrent entre les deux branches sont disjoints. Autrement dit, si vous avez modifié le fichier A, vous ne pouvez extraire une autre branche que si le fichier A est le même dans les deux branches. – Cascabel
Merci! Quand vous avez dit 'A' est le même dans les deux branches, vous voulez dire' A' avant mes changements (c'est-à-dire 'A' dans la tête de chaque branche). Correct? –