我们有一个 HEAD 分支,以及一个从 HEAD 分支创建的功能分支。我在功能分支上进行开发,并不断将 HEAD 的更改合并到我的分支。
完成该功能后,我尝试将其合并回 HEAD。这应该是一个 0-pain 操作,因为所有冲突都已经在之前合并到功能分支时得到了解决。然而,它从来都不是。
我最终复制了我的分支的全部内容并用它覆盖了 HEAD 分支。这是 Team Foundation System 2005 和 2008 中的情况。是错误还是我做错了什么?
我已经能够通过两种方式克服这个缺陷。
在功能完成之前,我从不与 main 或 HEAD 合并。(适用于 HEAD 更改对功能不重要的情况。)
这个很复杂。每次我决定将 HEAD 合并到功能分支时,我都会从 HEAD 创建一个我称之为集成分支的东西。然后我对特性分支分支变更集或特性分支上的第一个变更集进行毫无根据的合并。这将文件放在一起,并且是 TFS 应该允许我提供或检测两个兄弟姐妹之间的基础的一个论点。(我觉得这与历史不遵循分支有关。Team Foundation Power Toys 解决了这个问题。)当然要签入以完成关系的建立。然后我在功能分支和新的集成分支之间进行定期合并。这允许我在单个变更集中合并功能分支项。然后我在我的集成分支上工作,让我的特性分支死掉。当然,我在功能分支上丢失了历史记录,但我
对不起,它太复杂了。
事情就是这样,真的。假设我们的特性分支上有两个变更集,然后从 Head 合并一个新的变更集。
Head: Base ----------------> H1 -- \ \ Ftre: -> 分支 -> F1 -> F2 --> H1'
请注意,即使没有进行任何更改(解决冲突),这H1
也是对 的不同签入H1'
当我们现在从 Ftre 合并回 Head 时,我们有变更集F1
,F2
并且H1'
从 运行,但是 Head 在之后Base
有一个额外的变更集。H1
Base
由于我们知道要合并回 Head 的变更集包含所有功能H1
,因此丢弃 Head 中的变更(即变更集H1
)并仅从 Ftre 中获取变更集是没有问题的。但是,您不能从 GUI 执行此操作(除非最新版本允许这样做),而且很遗憾,我已经有一段时间没有使用 TFS 为您提供命令行语法了。