1

几天后,我必须进行一个复杂的提交,我将尝试详细解释:

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

  • 主干- 用于即时更改/修复、开发者游乐场等的分支
  • preproduction - 分支,用于客户端测试的所有功能都在这里
  • 生产- 名称说明了一切,产品的工作分支

所以通常开发人员会按照这样的顺序进行:

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

很标准,我猜。

现在,对于问题本身:在后备箱中,我们完成了一项艰巨的任务(1000 多个小时),这是在从 svn 迁移之前存在的,所以它不是 git-branched 或类似的东西,它只是一堆提交。我们需要将该任务合并到预生产中,然后相应地进行生产分支。

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

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

任何建议都非常感谢。

4

2 回答 2

2

如果您需要祖先提交(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

这将进行合并提交(非快进),因此您可以看到功能开始和停止的位置,而不是一长串提交。它还将保留主干分支,因此您可以继续提交它以准备合并下一个功能。

我们用来管理这个过程的模型是git-flow,这听起来很像你描述的工作流,所以我建议检查一下,以及支持它的命令行工具。

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

于 2012-06-26T11:16:04.727 回答
1

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

于 2012-06-26T11:04:19.887 回答