0
  1. 我有Branch1and Branch2,并且在两个分支中添加了一个同名的文件。说Branch1\folder\file.txtBranch2\folder\file.txt
  2. 我合并Branch1Branch2文件中并得到预期的合并冲突。
  3. 我选择Branch1文件的版本,提交并推送。

当我在其中看到文件的历史记录时,Branch2我看到该文件是“添加”而不是“修改”的。我希望已修改,因为该文件已经存在Branch2并由该文件更新,Branch1但 Git 历史记录并未反映这一点。

这是设计使然吗?有没有其他方法可以通过正确/期望的历史来实现相同的结果?

4

1 回答 1

1

背景资料

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

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

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

回答您的问题

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

这是您描述的场景的图表。(箭头从子指向父)

在此处输入图像描述

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

A > B : Added
A > C : Added
B > D : Modified
C > D : Unchanged
A > D : Added
于 2017-09-02T04:25:52.783 回答