在几天内,我必须做一个复杂的提交,我将尝试详细解释:
我们正在使用GIT(从svn迁移后)并拥有3个工作分支:
所以通常开发人员都会这样顺序:
新票 - >本地副本 - >主干 - >预生产 - >生产
非常标准,我想。
现在,问题本身: 在主干中,我们有一个完成的任务(1000多个小时),在从svn迁移之前就已存在,所以它不是git-branched,或者类似的东西,它只是一堆提交。我们需要将该任务合并到预生产,然后相应地生产分支。
我不能确定最轻松的方式是什么。我甚至不确定分支在迁移后是否有共同的祖先提交。
是否有解决问题的常用方法?也许我可以将与此任务相关的提交分组到分支中,然后将此分支与pre和production合并?
非常感谢任何建议。
答案 0 :(得分:2)
如果您需要祖先提交(总是一个好主意IMO),您可以使用SVN查找主干和预生产/生产最后相同的实际分歧点,然后在预生产分支上找到相应提交的SHA1在git中并执行此操作:
git checkout -b temp trunk // Don't use trunk itself in case it breaks
git rebase <SHA1 goes here> // Rewrite the commits as changes from that SHA1
// Possibly fix some conflicts
// Verify manually that you have the code you expect
git branch -m trunk old_trunk // Move old trunk aside
git branch -m temp trunk // Here's the new trunk!
这将使您的生产中断树干分支。你可以重复一遍,以便预生产也从生产中分支出来。
为了干净地合并它们,打开git rerere(以便在将预生产合并到生产中时记录并自动重用解决任何冲突的方式)然后执行:
git checkout preproduction
git merge --no-ff trunk
这将进行合并提交(no-fast-forward),以便您可以看到功能的开始和停止位置,而不是一长串提交。它也会保留主干分支,因此您可以继续保留它以准备合并下一个功能。
我们用来管理此流程的模型是git-flow,这听起来很像您要描述的工作流程,因此我建议您将其与command line tools一起检查以支持它。
此外,如果您希望对提交进行分组,我将探索使用rebase将它们从主干流中取出并将它们作为非快进合并放回,这样您就可以看到特定功能的开始和结束位置
答案 1 :(得分:1)
我倾向于分支制作,然后与这个新分支合并。然后任何问题都可以解决,最后这个分支将成为一个新的预生产,然后可能最终合并回生产,或根据历史,成为生产2.在http://www.ava.co.uk/git有一系列的Git教程和一个合并。它们可能是你已经知道的东西,在这种情况下我会道歉,或者它们可能足够清晰,让你对你所选择的方法充满信心。 HTH