【发布时间】:2016-03-12 06:15:01
【问题描述】:
我是Git 的新手,想了解git merge 命令的工作原理。所以我尝试了一个简单的git项目,例如:
我有两个分支:master 和 b。您可以在此处查看两者的 git 日志(1,2,4 是在分支中创建的示例文件):
* cf3456b (HEAD, b) add and modify 4 in b
* 68b9086 edit 1 in branch b
| * 81e6490 (master) remove 1 from branch b1
| * e0a6844 modify 2 in branch b1
| * 06bad1d add2 in branch b1
|/
* c667d3b add 1 in branch master
所以master只有一个文件:2b只有两个文件:1,4
现在当我尝试这样做时:
git merge master
我看到了这条消息:
CONFLICT(修改/删除):1 在 master 中删除并在 HEAD 中修改。 版本 HEAD 1 留在树中。自动合并失败;修复冲突 然后提交结果。
这对我来说很奇怪,我之前认为:
-
merge就像checkout尝试将内容从merge in分支的最新提交复制到merge into分支的最新提交,但与checkout相反,merge试图不更改merge into中的任何文件。最后,如果merge in和merge into分支具有相同的文件但状态不同,则会发生冲突。 - 我知道
git只保存文件的snapshot而不是differences。那么 git 是如何知道分支最新提交的变化的呢? (在消息中你可以看到1 deleted in master and modified in HEAD有区别)
现在,如果我的想法是正确的,那么文件 1 应该不会发生冲突。所以我的想法是不正确的,但是merge 是如何工作的呢?
【问题讨论】:
-
可能的重复(虽然没有详细说明):stackoverflow.com/q/14961255/1256452
标签: git version-control merge