2010-04-15 7 views
10

Est-il possible de fusionner les modifications d'un référentiel central vers une branche locale sans avoir à valider/stocker les modifications sur la branche locale et le maître de caisse? Si je travaille sur le «travail» d'une branche locale et qu'il y a des changements non-spécifiques, j'utilise les étapes suivantes pour obtenir les mises à jour du dépôt central dans ma branche de travail.git fusionner les modifications à la branche locale

git stash 
git checkout master 
git pull 
git checkout work 
git rebase master 
git stash pop 

Habituellement, il n'y a pas de changements non validés dans "travail", puis je omets les étapes de stockage.

Ce que je voudrais vraiment quelque chose comme ce qui suit:

git pull master (updates master while work branch is checked out and has changes) 
git rebase master (rebases the updates into work branch uncommited changes are still safe) 

Y at-il quelque chose plus facile que ce que je fais actuellement?

+0

Je suis étonné que cela est encore si difficile à faire dans Git. En tant qu'utilisateur SVN de longue date, cette fonctionnalité intégrée (fusionnant à l'évidence des changements à distance en une copie de travail modifiée) est une chose sur laquelle mon équipe comptait quotidiennement. – Spongman

Répondre

12

Vous pouvez faire (sur la branche work):

git stash 
git pull --rebase origin master 
git stash apply 

git pull --rebase deux changements à distance et tractions rebasage vos changements locaux au-dessus de ceux à distance. C'est à dire. fait essentiellement ce que vous montrez dans votre script.

changements locaux, bien sûr, doivent être engagés ou planqué sur merge ou rebase (parce que si un conflit de fusion se produit, les changements contradictoires devraient être engagés pour que vous puissiez les résoudre - mais où iriez vos changements locaux alors allez?)

Lorsque vous décidez ultérieurement de mettre à jour master et de fusionner la branche work avec celle-ci, cela ne posera pas de problèmes, car les modifications tirées sont les mêmes. Vous n'avez donc pas besoin de mettre à jour master lorsque vous apportez des modifications.

+1

Merci @Pavel et @Pran. Cela fonctionne, ce que je devais réaliser est qu'il n'était pas nécessaire de mettre à jour le maître à ce stade. Il sera mis à jour lorsque le travail sera fusionné en master. – ScottS

+0

Cela fonctionne. Merci! –

2

Je ne pense pas que vous pouvez tirer si vous avez des modifications non validées.

Par conséquent, vous pouvez faire quelque chose le long des lignes de:

git stash 
git pull --rebase <remote> <branch> # Calls rebase instead of merge. 
git stash pop 
0

Peut-être que les choses ont changé depuis 2010, mais vous pouvez tirer d'une même télécommande si vous avez des changements UNCOMMITED. Vos modifications locales resteront non validées, vous pouvez donc les différencier ou les fusionner à votre guise.

git pull origin master 

testé avec la version git 1.9.5.msysgit.1

De this SO answer

Questions connexes