Branch1
和Branch2
,并在两个分支中添加了同名文件。说Branch1\folder\file.txt
和Branch2\folder\file.txt
。 Branch1
合并到Branch2
并在文件上获得预期的合并冲突。Branch1
版本,提交并推送。当我在Branch2
中看到该文件的历史记录时,我发现该文件已添加,而不是“修改”。我希望修改,因为该文件已存在于Branch2
中,并且已由Branch1
的文件更新,但Git历史记录并未反映此内容。
这是设计的吗?有没有其他方法可以获得正确/期望历史的相同结果?
答案 0 :(得分:1)
与大多数其他版本控制系统不同,git不跟踪文件,而是跟踪内容。每次提交都是代码的大型快照,这意味着您可以确保准确地获取您所放入的内容,一点一滴。我们用来组织和理解快照的文件数据更像是git模型中的元数据。
当你比较两个提交时,即使它们之间有30个提交,git只会查看你要比较的两个提交。因此,当它看到内容被移动和修改时,它需要一组规则来解释元数据。
所以它看到一个文件被添加,删除,移动,修改等等,并不是通过比较两个快照并解释其差异来阅读你的行动日志。
这是设计原因,因为git将历史视为两个快照的比较,而不是一系列谨慎的人类行为。
以下是您描述的方案图。 (箭头从小孩指向父母)
比较下面的每对提交,git会将file.txt解释为:
A > B : Added
A > C : Added
B > D : Modified
C > D : Unchanged
A > D : Added