合并引入的提交是什么?

时间:2015-03-03 03:46:09

标签: git

将一个分支合并到另一个分支时,会得到一个描述合并的提交。如果我们使用neovim作为示例,a4b96f2是分支中引入的提交,6b7ece6是合并产生的提交。

令我困惑的是,这两个提交具有完全相同的内容。这有什么意义?此外,如果我通过git reset HEAD~将主服务器重置为1提交,则两个提交都将被取消。那是为什么?

2 个答案:

答案 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个节点:当前的节点和另一个节点,并创建另一个节点,将它们作为父节点。

  

这有什么意义?

它清楚地表明变更集来自其他地方。否则就不可能说你是否真的拥有权限并且已经提交给主树,或者你的代码只是拉取请求。