Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不清楚git推送如何影响远程分支_Git_Git Merge - Fatal编程技术网

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

不清楚git推送如何影响远程分支,git,git-merge,Git,Git Merge,我有一个新手问题。假设我的存储库图片是这样开始的: A <-- B <-- MASTER | A <-- B <-- O/M A故障: 我读过git push,只有当远程设备能够与您尝试推送的内容进行快速合并时,git push才有效 这是分支更新的默认约束(更新表单refs/heads/which)的引用)。遥控器可以建立其他规则,但这可能是有效的规则 还值得注意的是,“快进”实际上是标签移动的属性,而不是合并本身。git merge命令选择在

我有一个新手问题。假设我的存储库图片是这样开始的:

A <-- B <-- MASTER       |       A <-- B <-- O/M
A故障:

我读过git push,只有当远程设备能够与您尝试推送的内容进行快速合并时,git push才有效

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

还值得注意的是,“快进”实际上是标签移动的属性,而不是合并本身。
git merge
命令选择在可能的情况下进行快进,而不告诉其他人,这在许多地方确实被称为“快进合并”(尽管
git merge
手册页上说“当合并解析为快进时”,这是一个微妙的区别)

我。。。做一个“git pull”

pull脚本是以下内容的简写:

  • 那就去拿吧
  • 合并或重新设置基础(按照指示,默认值=合并)
  • 让我们假设“合并”。不过,让我这样写,而不是你画的图表:

            C - D        <-- master@{1}
          /       \
    A - B           G    <-- master
          \       /
            E - F        <-- origin/master
    
    但这使得在它上面贴上
    master@{1}
    标签变得更加困难。)

    理解这一点的一个关键是,标签(我已经向右推了一点)完全在您的存储库中,它们只是标签。(我所说的“仅标签”是指它们不是存储库对象提交时的永久性内容,每次提交时附带的内容都是永久性的。它们可以“剥离”,就像写在便笺上的标签一样,稍后粘贴到其他不同的对象上,甚至可以扔掉。)

    现在,如果你做了一个git推送,你的git会联系他们的git,两人会谈论他们拥有的东西。你的回答是:“我想让你提交
    G
    ,让你的
    refs/heads/master
    指向那里。”

    他们接着说:“我对
    G
    一无所知,告诉我更多!”你的描述是
    G
    指向
    D
    F
    ;他们知道
    F
    ,但不知道
    D
    ,所以你告诉他们
    D
    指向
    C
    ,然后是
    C
    指向
    B
    ,现在这两个都被抓住了。1

    此时,他们可以查看更新其
    ref/heads/master
    以指向
    G
    的建议,并确定将其
    master
    F
    移动到
    G
    是否是一个快速的过程。它会的,所以他们会接受它,并使他们的
    master
    分支点提交
    G

    在这个过程中,你的git根本没有告诉他们你的
    主分支!它只是说“我想让你把你的
    master
    指向提交
    G
    ”。然后,他们只是看看这对他们来说是否是一个快进


    1当然,还有比这更重要的一点:像这样的“对话”实际上是关于git对象的,当您通过提交发送时,它还必须发送任何必需的树和blob对象。标签更新也会在之后进行。但总的来说,这就是效果。

    不合顺序:

    我读过git push,只有当远程设备能够与您尝试推送的内容进行快速合并时,git push才有效

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

    还值得注意的是,“快进”实际上是标签移动的属性,而不是合并本身。
    git merge
    命令选择在可能的情况下进行快进,而不告诉其他人,这在许多地方确实被称为“快进合并”(尽管
    git merge
    手册页上说“当合并解析为快进时”,这是一个微妙的区别)

    我。。。做一个“git pull”

    pull脚本是以下内容的简写:

  • 那就去拿吧
  • 合并或重新设置基础(按照指示,默认值=合并)
  • 让我们假设“合并”。不过,让我这样写,而不是你画的图表:

            C - D        <-- master@{1}
          /       \
    A - B           G    <-- master
          \       /
            E - F        <-- origin/master
    
    但这使得在它上面贴上
    master@{1}
    标签变得更加困难。)

    理解这一点的一个关键是,标签(我已经向右推了一点)完全在您的存储库中,它们只是标签。(我所说的“仅标签”是指它们不是存储库对象提交时的永久性内容,每次提交时附带的内容都是永久性的。它们可以“剥离”,就像写在便笺上的标签一样,稍后粘贴到其他不同的对象上,甚至可以扔掉。)

    现在,如果你做了一个git推送,你的git会联系他们的git,两人会谈论他们拥有的东西。你的回答是:“我想让你提交
    G
    ,让你的
    refs/heads/master
    指向那里。”

    他们接着说:“我对
    G
    一无所知,告诉我更多!”你的描述是
    G
    指向
    D
    F
    ;他们知道
    F
    ,但不知道
    D
    ,所以你告诉他们
    D
    指向
    C
    ,然后是
    C
    指向
    B
    ,现在这两个都被抓住了。1

    此时,他们可以查看更新其
    ref/heads/master
    以指向
    G
    的建议,并确定将其
    master
    F
    移动到
    G
    是否是一个快速的过程。它会的,所以他们会接受它,并使他们的
    master
    分支点提交
    G

    在这个过程中,你的git根本没有告诉他们你的
    主分支!它只是说“我想让你把你的
    master
    指向提交
    G
    ”。然后,他们只是看看这对他们来说是否是一个快进


    1当然,还有一点
    A <-- B <-- E <-- F <-- G <-- O/M
    
    A <-- B <-- C <-- D <-- G <-- O/M
    
            C - D        <-- master@{1}
          /       \
    A - B           G    <-- master
          \       /
            E - F        <-- origin/master
    
    A - B - C - D - G
          \       /
            E - F