我的远程Git存储库有3个分支:
当一个开发者改变时,他将分支开发,例如issue123。 当他完成转换后,他将推进远程问题123。 我将在审核代码后将其合并到develop中。 我的问题是我如何修补从issue123进入新闻分支的所有更改。 我不想合并为开发,我只想应用更改。
由于
我准备了以下图片(远程存储库):
我想合并issue123来开发。这很容易。 但是,我还想修改从E,F对C到新闻分支的变化。 希望得到Git专家的更多帮助。
答案 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