不清楚git push如何影响远程分支

时间:2014-06-06 20:44:56

标签: git git-merge

我有一个新手git问题。让我们说我的存储库图片就像这样开始:

A <-- B <-- MASTER       |       A <-- B <-- O/M

我对本地主人进行了一些更改,同时有人也更新了远程主人。所以我有:

A <-- B <-- C <-- D <-- MASTER  |  A <-- B <-- E <-- F <-- O/M

现在我变得胡思乱想并做了一个'git pull'。根据我的理解,我现在应该看到:

                 O/M
                 |
                 V
      ---- E <-- F ------
      |                 |
      V                 ^
A <-- B <-- C <-- D <-- G <-- MASTER  |  A <-- B <-- E <-- F <-- O/M

到目前为止我是对的吗?现在我决定git push to remote master。我不太确定我应该在遥控器上看到什么样的图表。是吗:

A <-- B <-- E <-- F <-- G <-- O/M

看起来不对劲。或是它:

A <-- B <-- C <-- D <-- G <-- O/M

那个人也不能说服我。

我已经阅读过git push只有在远程可以与您尝试推送的内容进行快进合并时才有效。我无法调和该声明与遥控器上的最终图形应该是什么样的。

1 个答案:

答案 0 :(得分:4)

故障:

  

我读过git push只有在遥控器可以快速合并你试图推送的东西时才有效。

这是分支更新的默认约束(对refs/heads/whatever形式的引用的更新)。遥控器可以建立其他规则,但这可能是有效规则。

值得注意的是,&#34;快进&#34;实际上是标签移动的属性,而不是合并本身。 git merge命令选择在可能的情况下执行快进,而不是以其他方式告知,这确实称为&#34;快进合并&#34;在不同的地方(虽然git merge手册页说&#34;当合并解决为快进&#34;时,这是一个微妙的区别。)

  

我...做一个&#39; git pull&#39;

拉动脚本是:

的简写
  1. 获取,然后
  2. 合并或变基(按指示,默认=合并)。
  3. 让我们假设&#34;合并&#34;。不过你画的图表,让我这样写:

            C - D        <-- master@{1}
          /       \
    A - B           G    <-- master
          \       /
            E - F        <-- origin/master
    

    其中G是合并提交,G^DG^2F,依此类推。 (这也可以画出来:

    A - B - C - D - G
          \       /
            E - F
    

    但是这会使master@{1}标签更难上贴。)

    理解这一点的一个关键是,我向右推的标签纯粹位于你的存储库中,它们只是标签。 (通过&#34;只是标签&#34;我的意思是它们不像存储库对象提交的方式那样是永久性的,而且每个提交的东西都是永久的。它们可以&#34;剥离&#34;,就像标签一样写在便签上,稍后粘贴在其他不同的物体上,甚至扔掉。)

    现在,如果你做git push,你的git会联系他们的git,两人会谈谈他们有什么。你的话说:&#34;我想让你提交G并在那里refs/heads/master点。&#34;

    他们接着说:&#34;我对G一无所知,告诉我更多信息!&#34;您将G描述为指向DF;他们知道F但不知道D,所以你的人告诉他们关于D指向C,然后关于C指向B ,现在这两个人都赶上了。 1

    此时,他们可以查看提案,将refs/heads/master更新为G并确定是否将masterF移至G将是一个快进的人。它会,所以他们会接受它,并让他们的master分支点提交G

    在这个过程中,你的git实际上并没有告诉他们你的master分支!它只是说&#34;我希望你指出你的master提交G&#34;。然后,他们只是想看看他们是否快进。


    1 当然,除此之外还有更多内容:&#34;对话&#34;,例如它,实际上是关于git对象,当你的对象通过提交发送它还必须发送任何所需的树和blob对象。标签更新也会在之后发生。但总的来说,这就是效果。