Les réponses données jusqu'à présent ne sont pas idéales car elles nécessitent beaucoup de travail inutile pour résoudre les conflits de fusion, ou elles font trop d'hypothèses qui sont souvent fausses. Voilà comment le faire parfaitement. Le lien est vers mon propre site.
Vous avez des modifications non validées sur my_branch
lesquelles vous souhaitez vous engager master
, sans valider toutes les modifications de my_branch
.
Exemple
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Explication
Commencez par fusionner master
dans votre branche, car vous devrez le faire de toute façon, et c'est maintenant le meilleur moment pour résoudre tout conflit.
L' -u
option de (aka --include-untracked
) en git stash -u
vous empêche de perdre des fichiers non suivis quand vous faites plus tard git clean -f -d
dans les master
.
Après, git checkout master
il est important de ne PAS le faire git stash pop
, car vous aurez besoin de cette cachette plus tard. Si vous pop la planque créé my_branch
puis faites git stash
en master
, vous causer des conflits de fusion inutiles lorsque vous appliquez plus tard que dans Stash my_branch
.
git reset
met en scène tout ce qui en résulte git stash apply
. Par exemple, les fichiers qui ont été modifiés dans la cachette mais qui n'existent pas sont master
mis en scène comme des conflits «supprimés par nous».
git checkout .
et git clean -f -d
supprimez tout ce qui n'est pas validé: toutes les modifications apportées aux fichiers suivis et tous les fichiers et répertoires non suivis. Ils sont déjà enregistrés dans la cachette et s'ils sont laissés dans, master
cela provoquerait des conflits de fusion inutiles lors du retour à my_branch
.
Le dernier git stash pop
sera basé sur l'original my_branch
et ne provoquera donc aucun conflit de fusion. Cependant, si votre cachette contient des fichiers non suivis que vous vous êtes engagé à maîtriser, git se plaindra qu'il "n'a pas pu restaurer les fichiers non suivis à partir de la cachette". Pour résoudre ce conflit, supprimez ces fichiers de votre arborescence de travail, puis git stash pop
, git add .
et git reset
.