本地仓库没有 upstream tracking,git pull 拉了对象却不合并
非 clone 方式建的本地仓库,git pull 时 fetch 成功但报 There is no tracking information for the current branch,远端对象已落到 .git 里却不合并工作树,容易被误判为"已更新"。解法:git branch --set-upstream-to=origin/main main;合并前先看 merge-base 判断是否纯 fast-forward。
- git
- upstream
- pull
- 验收
现象
git pull输出* [new branch] main -> origin/main后跟There is no tracking information for the current branch,exit 1- 远端提交对象其实已经 fetch 到本地 .git,但工作树一个文件都没变
- 如果只看”没有网络报错”就收工,会把”拉了”误当”更新了”
根因
- 本地仓库是”先有文件,后 git init + git remote add”的方式建的,main 分支从未设置上游
- git pull = fetch + merge,没有 tracking 信息时 merge 不知道要合并哪个分支,直接跳过
- 这类仓库(本地先建、后来才接远端)默认不带 tracking,属于高频场景而非个例
解法(已验证)
git branch --set-upstream-to=origin/main main一次性补上- 合并前先诊断历史关系,确认无冲突风险再拉——
git merge-base HEAD origin/main结果等于本地 HEAD、且git log HEAD --not origin/main为空,即本地无独有提交,纯 fast-forward - 之后再
git pull→Updating 0ff85ff..5a6b0a7 Fast-forward,47 个文件变更,exit 0,耗时从首次约 5 分钟(对象下载)降到 4 秒
验证
git status -sb显示## main...origin/main,无 ahead/behind 漂移- 本地 HEAD 与远端 HEAD 一致,工作树干净