Les réponses données jusqu'à présent ne sont pas idéales parce qu'elles exigent beaucoup de travail inutile pour résoudre les conflits de fusion, ou parce qu'elles font trop d'hypothèses qui sont souvent fausses. Voici comment le faire parfaitement. Le lien renvoie à mon propre site.
Vous avez des changements non validés sur my_branch
que vous voulez engager master
sans valider toutes les modifications apportées par 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, puisque vous devrez le faire de toute façon, et que c'est le meilleur moment pour résoudre les conflits.
El -u
(alias --include-untracked
) en git stash -u
vous empêche de perdre des fichiers non suivis lorsque vous faites plus tard git clean -f -d
sur master
.
Après git checkout master
il est important que vous NE git stash pop
car vous aurez besoin de cette réserve plus tard. Si vous faites sauter la réserve créée dans my_branch
et ensuite faire git stash
en master
vous provoquerez d'inutiles conflits de fusion lorsque vous appliquerez ultérieurement cette réserve dans le programme my_branch
.
git reset
déstabilise tout ce qui résulte de git stash apply
. Par exemple, les fichiers qui ont été modifiés dans la cachette mais qui n'existent pas dans le fichier master
sont mis en scène comme des conflits "supprimés par nous".
git checkout .
y git clean -f -d
jeter tout ce qui n'est pas validé : toutes les modifications des fichiers suivis, et tous les fichiers et répertoires non suivis. Ils sont déjà sauvegardés dans la cachette et s'ils sont laissés dans le fichier master
provoquerait des conflits de fusion inutiles lors du retour à l'application my_branch
.
La dernière git stash pop
sera basé sur l'original my_branch
et ne provoquera donc aucun conflit de fusion. Cependant, si votre stash contient des fichiers non suivis que vous avez commis sur master, git se plaindra qu'il "n'a pas pu restaurer les fichiers non suivis du stash". Pour résoudre ce conflit, supprimez ces fichiers de votre arbre de travail, puis git stash pop
, git add .
y git reset
.
3 votes
Il y a un excellent tutoriel Git à droite. aquí sur SO. C'est une sorte de centre pour toutes les questions sur git sur stack overflow.
0 votes
Ce lien existe dans la série de questions "liées" à droite grâce à la magie de StackOverflow, mais je pense qu'il mérite un lien en commentaire : voir aussi Déplacer un travail existant, non engagé, vers une nouvelle branche dans Git. .