Git:将远程更改应用于另一个分支

时间:2014-03-31 01:34:50

标签: git git-branch

我的远程Git存储库有3个分支:

  1. 主人
  2. 开发
  3. 消息
  4. 当一个开发者改变时,他将分支开发,例如issue123。 当他完成转换后,他将推进远程问题123。 我将在审核代码后将其合并到develop中。 我的问题是我如何修补从issue123进入新闻分支的所有更改。 我不想合并为开发,我只想应用更改。

    由于

    我准备了以下图片(远程存储库): enter image description here

    我想合并issue123来开发。这很容易。 但是,我还想修改从E,F对C到新闻分支的变化。 希望得到Git专家的更多帮助。

3 个答案:

答案 0 :(得分:1)

您的问题的短期解决方案是使用'cherry-pick'

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

我不会长期推荐这个,因为你无法在git树中看到代码的合并位置。

阻止您使用“合并”的根本问题是,issue123上的提交来自您在新闻分支中不需要的开发分支。解决方案是,issue123的起始分支点应该是新的和开发分支的共同点(点A)。如果你从那里分支issue123,那么你可以将它合并到开发和新闻中。

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

答案 1 :(得分:0)

这个答案是为了向您展示如何按要求处理news分支。您最近在对其他答案的评论中没有指定 news 分支的用途。基本上,您的 new 分支似乎获得了开发分支中不存在的新功能。

您可能需要仔细重新考虑您的工作流程,因为通常只需要一个开发分支(通常称为 master )就可以轻松地重新考虑您的工作流程,该分支在准备就绪时可以获得所有新开发。然后你有短暂的功能分支,其目的只是跟踪一些要应用于主分支的补丁。出于稳定目的,您可以创建稳定的分支,例如以不包括最后一部分的稳定版本号命名。然后每个brach的目的是明确的,你可以避免混淆。

获取问题分支:

git checkout $ISSUE_BRANCH

重新调整新闻分支状态的变化:

git rebase news

但你可能需要稍微调整一下rebase才能应用你想要的更改。最简单的方法是使用交互式rebase,它允许您删除您不感兴趣的提交。

git rebase -i news

您还可以仔细阅读git-rebase手册页,并学习如何修改确切的提交范围。但是如果您没有提交用于指定范围的提交,则上述命令更容易使用。

如果出现混淆,请修复并使用:

git add -u
git rebase --continue

完成后,快进新闻分支以包含问题分支中的提交:

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

如果您想再次使用它,请删除问题分支:

git branch -d $ISSUE_BRANCH

请注意,可能还有其他方式,有时写得更快,但这应该是一种相当干净的方式来执行您的请求。

通过这种方式,您可以获得应用于 news 的相同变更集(其目的对我来说是可疑的),但提交对象当然会有所不同。

答案 2 :(得分:0)

您的分支模型与此类似:http://nvie.com/posts/a-successful-git-branching-model/

所以,一切都将最终进入develop分支。

国际海事组织,你根本不需要new分支机构:你的开发人员分支develop

git checkout -b issue123 develop

并实施修复程序。一旦他们完成,他们会在某处推送issue123并要求您查看补丁:

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

现在,issue123上有一个origin分支机构,您的开发人员有一封现成的电子邮件,可以发送给您(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

develop上的origin分支现已更新,请继续清理不再需要的内容:

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