将一个分支合并到另一个分支时,会得到一个描述合并的提交。如果我们使用neovim作为示例,a4b96f2是分支中引入的提交,6b7ece6是合并产生的提交。
令我困惑的是,这两个提交具有完全相同的内容。这有什么意义?此外,如果我通过git reset HEAD~
将主服务器重置为1提交,则两个提交都将被取消。那是为什么?
答案 0 :(得分:3)
您所指的提交是merge commit。当git无法执行快进合并时会发生这种情况。
至于为什么在执行git reset HEAD~
时丢失两次提交的原因,那说得很清楚here。基本上ref~
是ref~1
的简写,意味着提交的第一个父级。合并提交的第一个父项(可能)是它合并到的分支(不是它合并的分支),所以你不再看到这两个提交。
考虑这个树
First parent
|
A -- B ---- D <--- You're here
\ /
C
^
Second parent
将一个提交回到第一个父级会让你到这里
First parent <--- You're here
|
A -- B ---- D
\ /
C
^
Second parent
由于您现在处于提交B,因此提交D和C都不可见。提交不是取消,它们只是从您提交的提交中看不到。您通常只会看到您所在的提交的父(过去)提交,而不是子(未来)提交。
答案 1 :(得分:2)
这是合并的结果,没有使用快进。
如果使用no-ff
标志,那么git将获取2个节点:当前的节点和另一个节点,并创建另一个节点,将它们作为父节点。
这有什么意义?
它清楚地表明变更集来自其他地方。否则就不可能说你是否真的拥有权限并且已经提交给主树,或者你的代码只是拉取请求。