Question Comment commettre mes changements actuels à une branche différente dans git [duplicate]


Cette question a déjà une réponse ici:

Parfois, il arrive que je fasse quelques changements dans mon répertoire de travail et je réalise que ces changements devraient être commis dans une branche différente de celle en cours. Cela arrive généralement quand je veux essayer de nouvelles choses ou faire des tests et que j'oublie de créer une nouvelle branche au préalable, mais je ne veux pas commettre de code corrompu dans la branche master.

Alors, comment puis-je faire en sorte que les changements non validés (ou les changements stockés dans l'index) soient affectés à une branche différente de celle en cours?


537
2018-05-31 15:26


origine


Réponses:


Les autres réponses suggérant de vérifier l'autre branche, puis de s'y engager, ne fonctionnent que si la caisse est possible compte tenu des modifications locales. Si non, vous êtes dans le cas d'utilisation le plus commun pour git stash:

git stash
git checkout other-branch
git stash pop

La première stash cache vos modifications (en faisant essentiellement un commit temporaire), et les stash pop les ré-applique. Cela permet à git d'utiliser ses capacités de fusion.

Si, lorsque vous essayez d'afficher la mémoire, vous rencontrez des conflits de fusion ... les étapes suivantes dépendent de ce que sont 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'un autre côté, 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 pouvez économiser du travail . Comme d'habitude, il y a beaucoup de façons de le faire. En voici une, à partir de quand vous éclatez 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 réalisez à l'avance que cela va se produire, il suffit de valider 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 l'éviter la prochaine fois, peut-être en mettant votre nom de branche actuel dans votre invite en ajoutant $(__git_ps1) à votre PS1 dans votre bashrc. (Voir par exemple le Git à Bash docs.)


786
2018-05-31 20:48



Vous pouvez simplement créer une nouvelle branche et basculer dessus. Validez vos modifications ensuite:

git branch dirty
git checkout dirty
// And your commit follows ...

Vous pouvez également extraire une branche existante git checkout <name>). Mais seulement, s'il n'y a pas de collisions (la base de tous les fichiers édités est la même que dans votre branche actuelle). Sinon, vous recevrez un message.


49
2018-05-31 15:29



  1. git checkout my_other_branch
  2. git add my_file my_other_file
  3. git commit -m

Et fournissez votre message de validation.


19
2018-05-31 15:28