我不确定在git中解决这种情况的正确方法是什么,无论我做什么,我都会得到奇怪的结果。
我有一个文件的版本X,在提交A中。随着时间的推移,这个文件已被修改,现在处于A'。
有人通过电子邮件向我发送了一个文件X',它是commitsh A中包含的文件的修改版本。重要提示:此更改是带外的(通过电子邮件而非git)并且已过时(更改)到该文件的早期版本。)
我确切地知道我在git术语中“想要”做什么,但我不确定是否有最简洁的方法:倒带,提交,重放。我认为它应该是那么简单,我知道git在它内部内部进行重新定位时,但我不能让它自己工作。
我做了什么:
我的问题是,分支B与主服务器的合并会导致文件中所有行发生冲突。
文件中的更改(我认为这就是原因)如下:
版本A:
line 1
line 2
line 3
分公司主人:
line 1, file 1
line 2, file 1
line 3, file 1
通过电子邮件发送文件:
line 1
line B
line 3
如您所见,分支主数据包括对所有行的更改,但行保持不变。带外更改是对第2行的修改。
合并告诉我文档中的所有行都是冲突的。我可以理解git是否根本无法在两个版本中合并第2行的更改,但我不明白为什么所有3行都被标记为冲突。
有人可以帮帮我吗?
答案 0 :(得分:1)
我认为你回答了自己的问题。
如您所见,分支主数据包括对所有行的更改
合并时,Git不知道哪组更改对您更重要。你必须自己做出这个选择。
答案 1 :(得分:1)
我不确定这是否是“正确的”解决方案,但除非采取其他解决方法,否则我会接受这一点:
通过配置git以使用外部差异/合并编辑器,在这种情况下,令人惊叹且功能强大的BeyondCompare3,我能够解决这个问题。 BC3具有更精细的“块”变化,检测同一行中的修改。虽然我仍然需要手动合并更改,但它只是将单独更改的行标记为已更改(尽管它确实显示Git已经检测到更大的周围块已修改,但它为我提供了覆盖它的选项)。 / p>
答案 2 :(得分:0)
如果我错了,请纠正我,但看起来你真的想要git rebase B
作为最后一步,而不是git merge B
。
但是,对于所有三行,您可能仍然存在合并冲突,因为这些行彼此非常接近,因此git不希望假设冲突仅在第2行而不是第1-3行。