2

自从我开始在 3 人团队中使用 git 已经一年了,这是我第一次不明白为什么 git 会惩罚我。

我有主分支开发。

2013 年 9 月,我从“开发”创建了分支“主题”并开始研究它。

2013 年 10 月,我从“develop”创建了分支“fixOct”并开始着手处理它。

在文件“wsCommesse.cs”上,我有函数 A、C、D。

在分支“主题”上,我向功能 D 添加了一些评论。

在分支“fixOct”上,我在函数 A 和 C 之间添加了一个冗长的函数 B;然后我修改了函数 D 中的许多行。

今天我尝试将“主题”与“fixOct”合并。我收到一个合并冲突警告我 git 不知道他是否必须添加函数 B(好的),但将所有更改的代码都扔到函数 D 中,保持在分支“主题”上编辑评论(灾难性)。

我搜索了有关为什么会发生这种情况的文档,尝试了不同的合并策略、耐心、日志记录、详细信息;git 认为函数 D 没有冲突,他只是觉得必须丢弃该代码。

保持它的唯一方法是使用“merge -s ours topics”,但这会扼杀合并智能。

他为什么不警告我有冲突?为什么他认为杀死更新鲜的代码是安全的?我怎样才能防止将来出现类似的问题,甚至增加更多的手工检查冲突?

我使用 bitbucket Web 界面附上了所发生情况的差异屏幕截图。红色表示通过合并删除的最新代码。绿色表示合并后保留的旧代码。

在此处输入图像描述

相同的代码,并排的差异 在此处输入图像描述

在此先感谢,法布里齐奥

4

1 回答 1

0

@jthill 和 @charlesBailey 在评论中很有帮助,我还没有找到“真正的”解决方案,我没有时间花在这个问题上;我只会写我发现的东西,希望它对其他人有帮助。

问题的根源可能是人为错误,有人标记了最近的更新,然后在处理冲突时丢弃了一部分代码,导致该代码在后续合并中被抛出。

理解这一点的关键是使用git merge-base <commita> <commitb>比较两个分支的命令,并告诉您将用于两者之间未来合并的共同提交祖先是什么。

我发现祖先比我想象的要新得多,并且已经包含了我认为只是在其中一个分支中的代码;在最终合并中丢失的代码。

我认为更好地学习使用rebase将有助于缓解这个问题,但目前我将继续使用merge --no-fffilosophy 并尝试保持较低的当前分支数。

干杯,法布里齐奥

于 2013-10-28T15:37:20.083 回答