Json 添加的文件上的Git奇怪合并冲突
我在git managed.json文件上遇到了一个奇怪的合并冲突,不知道这是怎么发生的 总结情况:我在我的分支a中添加了一个数据json文件a.json,我的同事在他的分支B中添加了一个类似格式的数据json文件B.json 在正常情况下,当我合并分支B时,应该只添加B.json。到目前为止运行良好-但是今天git显示了与我添加的a.json文件的合并冲突 我们已经检查过分支A没有文件B.json,分支B没有文件A.json 以下是这场冲突的截图: 我怀疑git重命名函数可能导致了这一点,但我不确定这一点 任何帮助都将不胜感激。谢谢 *编辑 我在两次提交(添加A.json时提交和添加B.json时提交)上运行了git diff,并确认git检测到添加的文件为重命名文件Json 添加的文件上的Git奇怪合并冲突,json,git,Json,Git,我在git managed.json文件上遇到了一个奇怪的合并冲突,不知道这是怎么发生的 总结情况:我在我的分支a中添加了一个数据json文件a.json,我的同事在他的分支B中添加了一个类似格式的数据json文件B.json 在正常情况下,当我合并分支B时,应该只添加B.json。到目前为止运行良好-但是今天git显示了与我添加的a.json文件的合并冲突 我们已经检查过分支A没有文件B.json,分支B没有文件A.json 以下是这场冲突的截图: 我怀疑git重命名函数可能导致了这一点,但
但我仍然不知道为什么git检测到两个不同的文件添加作为重命名。也许我需要更多地了解git的重命名功能…我也认为这是因为重命名了文件。您可以自己检查:
git log-p-3 | grep-i'重命名为:'
…其中-3
限制要列出的提交数
Git根据文件的内容检测重命名。我也认为这是因为重命名了文件。您可以自己检查:
git log-p-3 | grep-i'重命名为:'
…其中-3
限制要列出的提交数
Git根据文件的内容检测重命名。好的,所以这里发生了一个有点复杂的场景 首先,我找到了使用命令“重命名”的根本原因
git merge --Xno-renames [branch_B]
情景:
因此,与其说这是一个bug或git重命名问题,不如说这更像是我们的工作流缺陷…好吧,这里发生了一个有点复杂的场景 首先,我找到了使用命令“重命名”的根本原因
git merge --Xno-renames [branch_B]
情景:
因此,这不是一个bug或git重命名问题,更像是我们的工作流缺陷…git的合并机制依赖于git的重命名检测机制 Git提交存储每个文件的快照。没有额外的信息:只有这些文件。因此:
- 如果有人在某个点添加了一些文件F,那么从缺少文件F的旧提交到包含文件F的新提交的差异包括以下指令:添加名为F的新文件,并包含给定的内容
- 如果有人删除文件F并进行新的提交,则从旧提交到新提交的更改包括以下指令:删除名为F的文件
- 如果有人将文件F1重命名为新名称F2,则旧提交和新提交之间的比较显示删除F1,并使用给定内容创建新F2。
git diff
能够检查这种奇怪的情况:文件F1消失了,文件F2出现在它的位置。也许这些毕竟是同一个文件
同时,
git merge
命令意味着:
- 找到一些共同的祖先承诺,我们和他们(无论“他们”是谁)都从中开始
- 将公共祖先中的快照与当前快照进行比较。无论发生了什么变化,这就是我/我们所做的工作:
changes,确实如此ours
- 将公共祖先中的快照与它们的快照进行比较,即我在
命令中告诉您的快照。不管发生什么变化,他们都是这么做的git merge
B.json
的文件。在您自己的提交中,有一个名为a.json
的文件,但没有B.json
文件。您是否删除了B.json
,并添加了一个完全不同的a.json
?或者,您是否将现有的B.json
文件重命名为A.json
,并可能对其进行一些更改
Git不知道,也不可能知道到底发生了什么事件,但是当Git找到一个重命名时,人们倾向于这样做,只要这两个文件“足够相似”。相似程度如何才能充分相似?Git有一种计算任意两个文件之间相似性索引的方法。diff或merge可以告诉您相似性索引是什么,您可以使用git diff
自己查看相似性索引,使用git diff--find renames
确保调用重命名检测器,并可以将其与某个阈值进行比较。默认阈值为50%:即使名称更改,至少50%相似的文件也是“同一文件”
-X no renames
标志完全关闭重命名检测。-X find renames=value
标志