执行git pull origin master后git log有PR记录但本地文件未更新
核心原因
- 本地缓存的远程分支引用已经陈旧,从所有本地分支的提交哈希全部卡在同一节点dcaa9f9就能看出来,本地没有同步到GitHub远程仓库的真实最新状态。git判断内容差异时,拿旧缓存的指针和当前分支做比对,自然无差别提示“已是最新”,哪怕远程仓库已经有新的合并提交。
- 之前执行的
git merge origin master、git diff origin master都是无效命令:origin是远程仓库标识,不是可直接引用的分支对象,正确的远程master引用路径是origin/master。上述命令被git解析成偏离预期的逻辑,没有执行实际的比对、合并动作,因此要么提示已最新,要么没有输出。 - 本地master本身就和toyota分支指向完全相同的提交,不刷新远程引用的前提下,本地无论怎么执行merge master,结果都会是“Already up to date”。
解决步骤
逐行执行以下命令即可完成同步:
- 强制刷新所有本地存储的远程分支引用,清理无效的陈旧缓存:
git fetch origin --prune
执行完可以先校验差异,确认本地master和远程master的区别:
git log master..origin/master --oneline
如果输出能列出你在GitHub合并的、未同步的PR提交,就说明之前的缓存确实存在陈旧问题。
- 更新本地master分支至与远程完全一致:
git checkout master git pull --ff-only origin master
此时本地master的提交记录会和你重新clone仓库拿到的master完全匹配,README.md的内容也会同步显示预期的变更。
- 切回toyota分支,合并最新master的变更:
git checkout toyota git merge master
存在内容差异时git会正常执行合并流程,不会再无意义提示“已是最新”。
操作提醒
git pull origin master不会自动刷新全局的远程分支引用缓存,遇到提示已最新但实际远程有新提交的场景,必须先执行git fetch拉取最新的远程指针,再做比对操作。- 从
git branch -vv的输出能看到,本地toyota分支目前比远程toyota超前1个提交,合并完master变更后如果需要同步到远程,执行git push origin toyota即可。 - 不要把远程名和分支名混写,所有涉及远程分支的操作,要按照
origin/分支名的格式写全引用路径,避免git解析出错。
内容的提问来源于stack exchange,提问作者Mona Jalal
相关产品推荐
相关产品推荐

