2010-04-15 3 views
10

Можно ли объединить изменения с центрального репо на локальную ветвь без необходимости фиксации изменений в локальной ветке и контроле?git слияние изменений в локальную ветвь

Если я работаю над «работой» в локальном филиале, и есть некоторые неоправданные изменения, я использую следующие шаги для получения обновлений из центрального репо в свою рабочую ветку.

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

Обычно нет никаких изменений в «работе», а затем я опускаю шаги тайника.

То, что я действительно хотел бы что-то вроде следующего:

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) 

Есть ли что-то проще, чем то, что я в настоящее время делать?

+0

это поражает меня, что это до сих пор так трудно сделать в Git. как долговременный пользователь SVN, эта встроенная функциональность (без слияния удаленных изменений в модифицированную рабочую копию) - это то, что моя команда полагалась ежедневно. – Spongman

ответ

12

Вы можете сделать (по отрасли work):

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

git pull --rebase и тянет удаленные изменения и rebases локальных изменений поверх удалённых. То есть по существу делает то, что вы показываете в своем скрипте.

Локальные изменения, конечно же, должны быть совершены или прятали на merge или rebase (потому что если произойдет слияние конфликт, конфликтующие изменения должны быть незавершенных для вас, чтобы решить их, - но где бы ваши местные изменения идут тогда?)

Когда вы позже решите обновить master и объединить с ним work, это не вызовет проблем, так как изменения потянуты. Таким образом, вам не нужно обновлять master, когда вы меняете изменения.

+1

Спасибо @Pavel и @Pran. Это работает, что мне нужно было понять, не нужно обновлять мастер на данный момент. Он будет обновляться, когда работа будет объединена с мастером. – ScottS

+0

Это работает. Благодаря! –

2

Я не думаю, что вы можете тянуть, если у вас есть незафиксированные изменения.

Таким образом, вы могли бы сделать что-то вдоль линий:

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

Может быть, все изменилось с 2010 года, но вы можете вытащить из удаленных даже если у вас есть неподтвержденные изменения. Ваши локальные изменения останутся незафиксированными, так что вы можете их разложить или объединить на досуге.

git pull origin master 

Испытано с мерзавца версии 1.9.5.msysgit.1

От this SO answer

Смежные вопросы