git pull会影响远程跟踪分支吗?

时间:2015-11-20 17:55:13

标签: git git-merge git-pull

我们知道git pull = git fetch + git merge。但是我对git merge的理解是它只影响你要合并的分支,而不是你要合并的分支。

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

git fetch origin
git merge origin/master

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

1 个答案:

答案 0 :(得分:2)

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

考虑像origin/master这样的远程跟踪分支的一个好方法是,你的git几乎一直都是独立于他们的(起源)git,除非你告诉你的git调用他们的git和协调。通过互联网电话调用遥控器的命令是git fetchgit push(当然还有初始git clone)。因此, origin/master始终是“master来源的地方”,因为您的git最后一次与其同步。

当您获取或推送时,然后您的git会知道他们的所有分支是什么,并更新您的远程跟踪分支。它将它们设置为当时远程所具有的任何内容,前提是您还具有这些SHA-1 ID。 1 您可以限制git更新的分支,但是默认为{{1} }是获取所有遥控器的当前信息。

还有一个命令 2 打电话给遥控器,但没有更新你的git的远程跟踪分支:git fetch执行提取或推送的第一步,然后只显示它从远程获取的所有引用名称。尝试一下,它纯粹是信息性的,但会让你看到它是如何运作的。

1 您的git无法将您自己的远程跟踪分支指向您没有的SHA-1。由于git ls-remote通常会带来所有内容,因此它是进行主要更新的内容。使用git fetch,您要求远程更改其SHA-1 ID转换为您的git发送的内容,因此如果它显示“是”,那么根据定义您还拥有这些对象 - 但这只是保证您发送的分支和/或标签,而不是其他分支。

2 实际上有几个,但只是一个很好的尝试插图。为了完整起见,我会提到git push有时也会拨打遥控器。