Git - 合并'添加'来自两个分支

时间:2017-09-02 01:03:03

标签: git git-merge git-history-graph

  1. 我有Branch1Branch2,并在两个分支中添加了同名文件。说Branch1\folder\file.txtBranch2\folder\file.txt
  2. 我将Branch1合并到Branch2并在文件上获得预期的合并冲突。
  3. 我选择文件的Branch1版本,提交并推送。
  4. 当我在Branch2中看到该文件的历史记录时,我发现该文件已添加,而不是“修改”。我希望修改,因为该文件已存在于Branch2中,并且已由Branch1的文件更新,但Git历史记录并未反映此内容。

    这是设计的吗?有没有其他方法可以获得正确/期望历史的相同结果?

1 个答案:

答案 0 :(得分:1)

背景资料

与大多数其他版本控制系统不同,git不跟踪文件,而是跟踪内容。每次提交都是代码的大型快照,这意味着您可以确保准确地获取您所放入的内容,一点一滴。我们用来组织和理解快照的文件数据更像是git模型中的元数据。

当你比较两个提交时,即使它们之间有30个提交,git只会查看你要比较的两个提交。因此,当它看到内容被移动和修改时,它需要一组规则来解释元数据。

所以它看到一个文件被添加,删除,移动,修改等等,并不是通过比较两个快照并解释其差异来阅读你的行动日志。

回答你的问题

这是设计原因,因为git将历史视为两个快照的比较,而不是一系列谨慎的人类行为。

以下是您描述的方案图。 (箭头从小孩指向父母)

enter image description here

比较下面的每对提交,git会将file.txt解释为:

A > B : Added
A > C : Added
B > D : Modified
C > D : Unchanged
A > D : Added