2014-01-08 59 views
3

场景:如何合并从旧分支到新分支的一个更改?

  • 开发的主分支
  • 叉掌握到一个特性分支,它在它
  • 开发发送给QA,一个功能多一些在主
  • git checkout Feature
  • 做一个小的修复
  • 发送功能,与修复,回到QA
  • git checkout master
  • git merge Feature

想象一下,我的惊讶,当Git的说:“没关系,你要掌握的样子立即修复”,并扔掉了我所有的“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中;我想单独离开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工作。在这种情况下,只有一个哈希标签可供选择。我想我可以挑选一份他们的清单。但我也认为(来自twitter)rebase是邪恶的,所以这个答案必须未经证实。全部发送! – Phlip

+1

@Phlip我不相信樱桃采摘,除非它是一次性操作(意味着你将离开那个樱桃采摘的分支,而不再使用它)。请参阅http://stackoverflow.com/a/18445186/6309 – VonC

相关问题