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