繁体   English   中英

Git复杂合并(从svn迁移后)

[英]Git complex merge (after migration from svn)

在几天内,我必须做一个复杂的提交,我将尝试详细解释:

我们正在使用GIT(从svn迁移后)并有3个工作分支:

  • trunk - 分支机构,用于即时更改/修复,开发人员的游乐场等
  • preproduction - branch,用于客户端测试的所有功能
  • 生产 - 名称说明了一切,产品的分支

所以通常开发人员会这样顺序:

新票 - >本地副本 - >主干 - >预生产 - >制作

非常标准,我想。

现在,问题本身:在主干中我们有一个任务完成的地狱(1000多个小时),那是从svn迁移之前的那个,所以它不是git-branched,或者类似的东西,它只是一堆提交。 我们需要将该任务合并到预生产,然后相应地生产分支。

我无法确定最轻松的方式是什么。 我甚至不确定分支在迁移后是否有共同的祖先提交。

是否有解决问题的常用方法? 也许我可以将与此任务相关的提交分组到分支中,然后将此分支与pre和production合并?

任何建议都非常感谢。

如果你需要一个祖先提交(总是一个好主意IMO),你可以使用SVN找到干线和预生产/生产最后相同的实际分歧点,然后在git中的预生产分支上找到相应提交的SHA1。做这个:

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 ,听起来很像你描述的工作流,所以我建议你检查它,以及支持它的命令行工具

此外,如果您希望对提交进行分组,我将探索使用rebase将它们从主干流中取出并将它们作为非快进合并放回,这样您就可以看到特定功能的开始和结束位置。

我倾向于分支生产,然后与这个新分支合并。 然后任何问题都可以解决,最后这个分支将成为一个新的预生产,然后可能最终合并回生产,或根据历史,成为生产2.在http:// www。有一系列的Git教程。 ava.co.uk/git和一个合并。 它们可能是你已经知道的东西,在这种情况下我会道歉,或者它们可能足够清晰,让你对你所选择的方法充满信心。 HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM