为什么从TFS中的功能分支合并回来这么痛苦?

时间:2009-01-05 09:08:29

标签: tfs merge branch

我们有一个HEAD分支,以及一个在HEAD分支之外创建的功能分支。 我在功能分支上开发,并不断将HEAD的更改合并到我的分支。

当我完成该功能后,我尝试将其合并回HEAD。这应该是一个0-pain操作,因为所有冲突都已在先前与功能分支的合并中解决。但是,它永远不会。

我最终复制了我的分支的整个内容并用它覆盖了HEAD分支。这是Team Foundation System 2005和2008中的情况。这是一个错误还是我做错了什么?

2 个答案:

答案 0 :(得分:0)

事情就是这样,真的。假设我们的功能分支上有两个变更集,然后合并Head的新变更集。

Head: Base ----------------> H1 --
           \                      \
Ftre:       -> Branch -> F1 -> F2 --> H1'

请注意,即使未进行任何更改(解决冲突),H1也会与H1'签入不同的

当我们现在从Ftre合并回Head时,我们有从F1开始的变更集F2H1'Base,但是Head有一个额外的变更集{在H1之后{1}}。

由于我们知道我们合并回Head的变更集包含Base的所有功能,因此丢弃Head中的更改(即变更集H1)并仅采用来自Ftre的变更集。但是,您无法从GUI执行此操作(除非最新版本允许此操作)并且已经有一段时间了,因为我使用TFS不幸地为您提供了命令行语法。

答案 1 :(得分:0)

我已经能够通过两种方式克服这个缺陷。

  1. 在功能完成之前,我从不与main或HEAD合并。 (适用于HEAD更改对功能不重要的情况。)

  2. 这个很复杂。每当我决定将HEAD合并到功能分支时,我就会创建我称之为HEAD的集成分支。然后,我对功能分支分支变更集或功能分支上的第一个变更集进行无基本合并。这将文件放在一起,是TFS应该允许我提供或检测两个兄弟之间的基础的参数。 (我觉得这与历史没有跟随分支有关.Team Foundation Power Toys修复了这个问题。)当然,检查完成关系的建立。然后我在功能分支和新集成分支之间进行定期合并。这允许我在单个变更集中合并功能分支项。然后我解决了我的集成分支,让我的功能分支死亡。当然我在功能部门失去了历史,但我不确定我是否对此感兴趣。

  3. 对不起它太复杂了。