不清楚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