git - git pull 与 git-fetch 的一些混淆

标签 git git-pull git-fetch

<分区>

那么 - 有人可以澄清一下吗:

我跑:

git pull origin master  
git status

然后它提取更改并说:

your branch is ahead of origin/master ... blahblah by 6 commits...

当我运行

git fetch
git status

它说:

# On branch master
nothing to commit (working directory clean)

所以 - 我认为 git pull 默认执行 git fetch - 那么为什么它说“提前 6 次提交”而没有额外的 git fetch

最佳答案

git status 中的“X 提交之前或之后”文本基于当前分支的跟踪分支状态; remotes/origin/master 例如,如果你在 master 上。

当您运行 git pull 并同时指定远程和分支时,它会获取新的提交并将它们 merge 到当前分支中,但它不会更新origin 的远程跟踪分支。相反,它将刚刚获取的提交指向 FETCH_HEAD

另一方面,在没有指定参数的情况下运行 git fetch确实更新了所有远程跟踪分支,因此它使消息消失。没有参数的 git pull 做同样的事情。

我自己遇到过很多次的微妙陷阱!相反,我希望 git 在针对特定远程的每次提取时更新所有远程跟踪分支。

关于git - git pull 与 git-fetch 的一些混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549778/

相关文章:

Eclipse:如何使用 key 文件通过 ssh 克隆 git?

GitHub - 致命 : could not read Username for 'https://github.com' : No such file or directory

Git 部分 fork ,同步 pull/merge

git - "Proper" pull git "production branch"到生产服务器的方法

git - 只需一个命令即可获取和 checkout 远程 git 分支

git - git fetch 的奇怪行为

git - 如何在 VSCode 的旧 git 更改中搜索字符串?

git - 在不推送本地分支的情况下重置远程分支

Git 设置最佳实践

GIT 下载 pull 请求文件已更改