gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:38:31 25 4
gpt4 key购买 nike

我有一个新手 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 到远程主机。我有点不确定我应该在 Remote 上看到什么样的图表。是吗:

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

这看起来不对。或者是:

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

那个也不能说服我。

我读过 git push 仅在远程可以与您尝试推送的内容进行快进 merge 时才有效。我无法调和该声明与 Remote 上的最终图表应该是什么样子。

最佳答案

乱序:

I have read git push only works if the remote can do a fast-forward merge with the stuff you are trying to push.

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

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

I ... do a 'git pull'

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

  1. 获取,然后
  2. merge 或 rebase (按照指示,默认 = merge )。

让我们假设“merge ”。不过,让我这样写,而不是你画的图:

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

哪里G是 merge 提交,G^D , G^2F , 等等。 (这个也可以画出来:

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

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

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

现在如果你做 git push ,你的 git 联系他们的 git,两人谈论他们有什么。你的说:“我想给你提交 G 并让你的 refs/heads/master 指向那里。”

然后他们说:“我对 G 一无所知,请告诉我更多信息!”你的描述G作为指回DF ;他们知道 F但不是 D , 所以你告诉他们关于 D指回C , 然后关于 C指回B ,现在两人都被追上了。1

此时,他们可以查看更新其 refs/heads/master 的提案指向G并确定是否移动他们的 master来自 FG将是一个快进。它会,所以他们会接受它,并制作他们的 master要提交的分支点 G .

你的 git 实际上并没有告诉他们你的 master在这个过程中根本没有分支!它只是说“我希望你指出你的 master 来提交 G”。然后,他们只是看看这是否适合他们


1当然,还有比这更多的东西:“对话”实际上是关于 git 对象的,当你发送提交时,它也必须发送任何需要的树和 blob 对象。标签更新也会在之后发生。但总的来说,是这样的效果。

关于git - 不清楚 git push 如何影响远程分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com