git pull是否影响远程跟踪分支



正如我们所知,git pull=git fetch+git merge。但我对gitmerge的理解是,它只会影响您正在合并的分支,而不会影响您正在从中合并的分支。

所以在git pull的情况下,我想它看起来是这样的:

git fetch origin
git merge origin/master

如果是这样的话,将在master上重播来自origin的新更改,但origin/master不会将这些更改提交到本地master分支。git pull是否确保远程跟踪分支(origin/master)包含git合并后在master中所做的所有新更改,还是在执行git push时完成的?

简单的答案很简单:不,远程跟踪分支不受影响。

考虑像origin/master这样的远程跟踪分支的一个好方法是,除了告诉git调用他们的git并进行协调外,你的git几乎一直独立于他们(源)的git。这样做的命令——通过互联网电话呼叫遥控器——是git fetchgit push(当然还有最初的git clone)。因此,origin/master在上次git与之同步时始终是"master在原点上的位置"。

当你获取或推送时,然后你的git会得到他们的git对所有分支的想法,并更新你的远程跟踪分支。它将它们设置为远程设备当时拥有的任何ID,前提是您也有这些SHA-1 ID1您可以限制git更新的分支,但直接git fetch的默认值是获取远程的所有当前信息。

还有一个命令2可以调用远程,但不会更新git的远程跟踪分支:git ls-remote执行获取或推送的第一步,然后简单地显示它从远程获得的所有引用名称。试试看,这纯粹是信息性的,但会让你看到它是如何真正发挥作用的。


1您的git无法将您自己的远程跟踪分支指向您没有的SHA-1。由于git fetch通常会带来所有内容,所以它是进行主要更新的那个。使用git push,您可以要求远程将其SHA-1 ID更改为git发送的东西,所以如果它说"是",那么根据定义,您也有这些对象——但这只能保证发送的分支和/或标记,而不能保证它们有其他分支。

2实际上有几个,但只是一个很好的例子。为了完整起见,我会提到git remote show有时也会给遥控器打电话。

最新更新