为什么需要 git pull 来更新(不同的)分支(将分支移动到最新提交而不需要 git pull)?

sdb*_*bbs 3 git git-pull

我很乐意为这个问题写一个更精确的主题,但目前我无法更好地表达它。

基本上,假设您有一个存储库,其中有多个分支,例如“master”和“mybranch”。

所以,假设你在 master 上:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

然后你git pull在这里做;为分支mastermybranch. 由于您已经位于分支中mastermaster因此其 HEAD 自动更新为git最新收到的提交。

现在,假设您使用 checkout 更改分支:

$ git checkout mybranch
Switched to branch 'mybranch'
Your branch is behind 'origin/mybranch' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Run Code Online (Sandbox Code Playgroud)

现在这就是让我困惑的地方 - 在之前的拉取中,(显然)所有最新的提交 - 包括那些mybranch- 都已被检索;否则我的本地 git 不会“知道”我的本地分支“落后...... 2次提交”。

所以我的问题是:当我们已经下载了这些新提交时,为什么我需要再次执行“git pull”,与服务器进行不必要的往返mybranch?是否没有“git update-head”或某些命令可以在本地执行此操作,而无需往返服务器?

Rom*_*eri 5

您在图片中缺少远程跟踪分支,这就是导致您困惑的原因。

(提醒:git pull这是执行两个操作的便捷方法:git fetch那么git merge origin/<currentBranch>

当您fetch不修改本地分支时,您正在更新远程跟踪分支,它们是远程分支的镜像。

您不应检查或修改这些分支,正如您所提到的,它们用于比较或其他检查的目的。

git pull不过,比 更进一步git fetch,将远程跟踪分支合并到其本地对应分支中。

这解释了为什么您需要显式更改分支,然后再次拉取(或简单地合并)以更新其他分支。