了解为什么git auto merge会保留旧版本的

时间:2018-02-20 11:01:40

标签: git

我们有一个分支" sprintX"和一个"主人"分支,在我们的sprint中我们推送到sprint分支,在sprint结束时,我们将它合并到master中。在sprint期间,我们将master合并到分支中以获取修补程序。

今天我们尝试将master合并到我们的分支中,并且我们在文件上存在多个冲突,因为分支创建和git自动合并将文件保留在主分支中,即将新代码删除到我们的sprint分支中。 / p>

我们想了解为什么git以这种方式解决冲突,以及我们如何改变我们的做事方式以避免它?

1 个答案:

答案 0 :(得分:3)

很可能前段时间有人使用过"还原"用于删除主分支上的该行,或者已合并到主分支但未分配给当前sprintX的任何修补分支的选项。在这种情况下," master"分支知道它已被更改然后撤消,并认为旧版本是正确的版本,而您的sprintX没有看到恢复并认为新版本是正确的版本。巴姆!冲突。

转到分支,仔细检查此文件的历史记录。检查该行并查看它在新旧版本之间来回更改的时间。寻找任何明确的"还原" (提交命名为' revert')或隐式(有人简单地将文件编辑回旧格式)或者通过uncareful-merge恢复(有人做了合并,用旧版本覆盖了该行)。真。所有的。这是因为"还原"选项只是一个提交。没什么特别的。它可能是一个直接的还原,或者是偶然的,我刚才列出的东西是最常见的东西,迫使分支有一个旧版本的东西。

然后,知道它在主人身上发生了什么,检查那些地方周围的历史记录,并试着猜测为什么那个人(谁做了还原)没有将它包含在sprintX中