2014-03-31 73 views
1

我的远程Git仓库有3个分支:混帐:应用远程切换到另一个分支

  1. 发展
  2. 新闻

当一个开发的变化,他将分支开发这样作为issue123。 当他完成更改后,他将推送到远程issue123。 我会在审查代码后将它合并到开发中。 我的问题是我如何修补从issue123进入新闻分支的所有更改。 我不想合并为开发,我只是想应用更改。

感谢

我已经准备了下面的图片(远程储存): enter image description here

我想合并issue123发展。这是一件容易的事。 但是,我也想修补从E,F对C到新闻分支的变化。 希望得到Git专家的更多帮助。

+0

你怎么能肯定的是,在'develop'所做的更改问题分支将在当前的'新闻'分支中工作?多久会更新'master'和'news'? – Jason

+0

'news'分支与其他分支有什么关系? –

+0

保持本地所有更改,在本地执行更改。你可能想要将“官方”分支合并成新闻,或者将其他人的新闻重新组合。 – vonbrand

回答

1

对您的问题的短期解决方案是使用“摘樱桃”

git checkout news 
git cherry-pick E 
git cherry-pick F 

我不会在长期推荐这来,因为你看不到的地方的代码是从在GIT树合并。

阻止您使用“合并”的潜在问题是issue123上的提交来自您不想在新闻分支中进行开发的分支。解决的办法是issue123的起始分支点对于新的和发展中的分支应该是共同的(点A)。如果你从那里分支issue123,那么你可以将它合并到开发和新闻。

也许你需要制定出一个更好的分支策略为您的团队,虽然使这项工作...尽量不要发动战争;)

+0

这是我的问题的解决方案。非常感谢你。 – teddy

+0

这是我的问题的解决方案。非常感谢你。 – teddy

0

这个答案在这里向你展示如何按要求处理news分支。你没有指定新闻分支的目的,直到最近在对其他答案的评论中。基本上你的新的分支似乎得到了开发分支中不存在的新功能。

你可能想仔细地重新审视自己的工作流程,因为它是通常更容易只设一个开发分支,通常被称为,它可以获取所有的新的发展时,它的准备。然后你有短暂的功能分支,其目的只是为了追踪一些要应用到主分支的补丁。为了稳定目的,您可以创建稳定的分支,例如以除最后一部分之外的稳定版本号命名。然后,每个布道的目的都很明确,并且避免混淆。

获取问题分支:

git checkout $ISSUE_BRANCH 

调整基线的消息分支的状态的变化:

git rebase news 

但是你可能需要调整底垫一点点,只应用更改你想要。要做到这一点最简单的方法是一个互动的底垫,它允许你删除你不感兴趣的提交。

git rebase -i news 

你也可以仔细阅读git-rebase手册,学会变基提交的确切范围。但是如果你没有使用哪个提交来指定范围,上面的命令更容易处理。

如果confict出现,解决它,并使用:

git add -u 
git rebase --continue 

完成后,快进新闻分支在问题分支的提交:

git checkout news 
git merge --ff-only $ISSUE_BRANCH 

删除问题分支的情况下,你会想再次使用它:

git branch -d $ISSUE_BRANCH 

请注意,有可能其他方式,有时更快写,但这应该是一个相当干净的方式来做你的要求。

这样你就会得到相同的变更集新闻(其目的是令我怀疑),但提交对象当然是不同的。

+1

谢谢@Pavel Simerda。当我尝试你的帮助。我坚持第二步:git rebase新闻。它不适用于只有E,F对C的变化。它适用于比C更老的变化。 – teddy

+0

好点。您可能需要稍微调整rebase。我会试着相应地修改答案。 –

0

你的分支模式是类似这样的:http://nvie.com/posts/a-successful-git-branching-model/

所以,一切都将最终使它的方式进入develop分支。

IMO,你不需要new分支都:你的开发者分支develop

git checkout -b issue123 develop 

,并实现修复。一旦他们完成,他们推issue123的地方,并要求你审查补丁:

git push origin issue123 
git request-pull develop origin/issue123 

现在,有关于originissue123分支和你的开发有一个现成的电子邮件,她可以给你(输出为git request-pull)。

你做

git fetch origin 
git checkout -b review/issue123 origin/issue123 

您查看该补丁,并决定这是很好的。下一步将是(同时review/issue123是)以

git rebase develop 

现在,review/issue123可以简单地合并为快进合并为develop

git checkout develop 
git merge review/issue123 
git push origin devlop 

origindevelop分支现在已更新,继续前进并清理不再需要的东西:

git push origin :issue123 # delete the original issue123 branch on origin 
git branch -d review/issue123 # delete the local branch since it's now in develop 
+1

感谢您的评论。然而,新闻与开发分支并行发展。它具有一些不包含在开发分支中的功能。 – teddy

+0

@teddy:在这种情况下,在将修复合并到'develop'之后,只需要'git checkout news && git merge develop'。 – eckes

+0

@eckes可能或可能不是他想要的。但是你是对的,当你合并时你必须合并* upstream *到* downstream *,如果我可以调用它们,或者* stable *分支到* testing *分支,只要首先应用于两者的更新稳定。但是经常使用rebase工作流。 –