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

标签 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

然后你在这里做git pull;为 master 分支和 mybranch 检索新的提交。由于您已经在分支 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)

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

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

最佳答案

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

(提醒:git pull 是执行两个操作的便捷方式:git fetch 然后是 git merge origin/<currentBranch>)

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

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

git pullgit fetch 更进一步,但是,并将远程跟踪分支 merge 到其本地分支中。

这解释了为什么您需要显式更改分支然后再次 pull (或简单地 merge )以更新您的其他分支。

关于git - 为什么需要 git pull 来更新(不同的)分支(将分支移动到最新的提交而无需 git pull)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932790/

相关文章:

git - 我如何强制 git pull 在每次 pull 时覆盖所有内容?

git push *到*浅克隆,为什么不呢?

git - 如何更改 git repo 的所有者?

git - 如何从不相关的项目中撤消 git pull?

git - 我可以告诉 git pull 覆盖而不是 merge 吗?

git - 恢复 git merge --abort 后删除的 git 文件

git - 用 Git 重命名 : Using git mv vs deleting a file and adding another

Git 子模块返回空白?

git - 将 git 与 Logic Pro 结合使用

git - 子模块和 'git pull --rebase'