我很乐意为这个问题写一个更精确的话题,但目前我无法更好地表达它。
基本上,假设您有一个仓库,其中有多个分支,例如“ master”和“ mybranch”。
因此,假设您在掌握知识:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
那你就git pull
在这里 master
分支和都检索新提交mybranch
。由于您已经在branch中master
,master
因此其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)
现在,这使我感到困惑-在上一遍中,(显然)所有最新提交(包括其中的提交)mybranch
都已被检索;否则我的本地git不会“知道”我的本地分支“落后于……2次提交”。
所以我的问题是:当我们已经有这些新的提交要mybranch
下载时,为什么要再次进行“ git pull”,不必要地往返服务器?是否没有“ git update-head”或某些命令,它们可以在本地进行,而无需往返服务器?
您对第一步发生的情况的解释不正确。当你做了git pull
从master
分支,你真的这样做git pull origin master
。这将更新本地跟踪分支origin/master
,然后将该分支合并到本地master
以快速转发它。它不影响其他分支。
如果您只想往返于Git服务器,则可以尝试执行以下操作:
git fetch origin # update all local tracking branches
# from e.g. mybranch
git merge origin/mybranch
然后,如果您还想更新本地master
分支,则只需签出并合并:
git checkout master
git merge origin/master
请注意,以上两个步骤完全在本地进行,独立于远程Git服务器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句