2014-01-08 4 views
3

Сценарий:Как слить одно изменение из старой ветви в новую ветку?

  • DEV в главной ветви
  • мастер вилки в художественном отделении, и отправить его в QA, с одной из особенностей в нем
  • разработчика еще немного в мастер
  • git checkout Feature
  • сделать один маленький исправить
  • посыла Feature, с этим исправлением, обратно в QA
  • git checkout master
  • git merge Feature

Представьте себе мое удивление, когда Git сказал «хорошо, вы хотите мастер выглядеть Fix прямо сейчас», и выбросил все мои «Dev некоторые более» изменения. Мне нужно только применить только хэштег, который отличался от того, когда две ветви раздвоены.

Как выполнить этот простой & очевидный сценарий? Кошмар был бы тем, что я делал то же изменение в мастер-классе, а затем получал неуместный непримиримый конфликт слияния, когда одно и то же изменение переходит в «производственную» ветвь ...

+0

Странно, что это происходит. Он должен работать так, как вы ожидаете. – Abizern

ответ

1

У вас есть 2 возможности: 1/Вы должны сначала объединить свои основные изменения в вашей функции, разрешите конфликт потенциально, тогда, когда все будет в порядке, объедините свою функцию в главном.

git checkout master 
git pull 
git checkout Feature 
git pull 
git merge master --no-commit --no-ff 

# Analyze the changes that will be merged into your Feature 
git commit 
git push 

и сделать то же слияние на ваш мастер

2/Вишневый выбрать совершающее вы хотите, обновить конфликт и совершить.

git cherry-pick _your_Hash_ 
+0

Ваше первое предложение похоже на то, что я хочу поместить все ГЛАВЫ мастера в Feature; Я хочу оставить функцию в покое. Я попробую ваше второе предложение. – Phlip

+0

Сообщите нам, если это сработает – Franck

3

Если никто не зависит от признака ветви (то есть, если никто не вытащил из шляпы ветви, вы толкнули), я бы, конечно, перебазировать его на вершине master:

git checkout master 
# make sure master is up-todate 
git pull 

# rebase my feature branch on top of master 
git checkout myFeatureBranch 
git rebase origin/master 

Это повторяет ваши изменения поверх мастера, и вы можете разрешить любой конфликт локально в своей ветке свойств.

Тогда назад к мастеру слияния является тривиальным быстро вперед один

git checkout master 
git merge myFeatureBranch 

Наконец, вы можете нажать master: вверх по течению репо будет принимать эти изменения снова как быстро вперед слияния (вы только добавление нового фиксируется поверх origin/master)

+0

К сожалению, для нашей темы работает git cherry-pick. В этом случае нужно было выбрать только один хэшт. Полагаю, я мог бы составить список из них. Но я также подумал (из твиттера), что перебаза была злой, поэтому этот ответ должен быть неподтвержденным. Tx все! – Phlip

+1

@Phlip Я не доверяю выбору вишни, если это не одноразовая операция (это означает, что вы оставите эту ветку, из которой вы забираете вишню и больше не используете ее). См. Http://stackoverflow.com/a/18445186/6309 – VonC

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