Git是否支持自动拉取远程文件?未执行git fetch也能查看origin分支改动?
Git无需fetch即可查看origin/内容的原理说明
这不是Git新增的自动拉取远程仓库的特性,该现象由Git的远程分支本地缓存机制导致:
- 你本地看到的
origin/<branch>本质是Git存储在本地的「远程分支跟踪引用」,它不会和远程仓库自动实时同步,存储的永远是你最后一次执行git fetch、git pull、git push等远程交互命令时,拉取到的对应远程分支的最新 commit 记录。 - 你可以直接执行
git checkout origin/<branch>的原因是你操作的本来就是本地已有的缓存数据,整个过程没有触发任何和远程仓库的通信请求。如果远程分支产生了新提交但你没有执行过任何拉取操作,checkout到origin/<branch>看到的依旧是旧内容,不可能获取到最新的远程更新。 - 你产生「无需fetch也能拿到最新内容」的错觉,通常是你之前执行过
git pull或者其他隐含了git fetch逻辑的操作,已经在本地更新了origin/<branch>的缓存,只是你没有留意到该操作的执行。
你可以通过以下操作验证上述逻辑:
- 前往GitHub对应仓库的目标分支,提交一个新的改动
- 回到本地仓库,不执行任何拉取相关命令,直接执行
git log origin/<branch>,可以看到提交记录里没有你刚刚新增的改动 - 执行
git fetch origin后再执行git log origin/<branch>,就能看到最新的提交记录,此时checkout才能拿到最新的文件内容
内容的提问来源于stack exchange,提问作者Alish Safarli
相关产品推荐
相关产品推荐

