git pull 未更新代码最常见原因是本地有未提交修改或当前分支未跟踪远程分支;需检查分支状态、设置追踪关系、暂存本地改动,或用 git fetch --all 同步全部远程引用。

git pull 为什么没更新到最新代码?
最常见的情况是:本地有未提交的修改,或者当前分支没跟踪远程分支。git pull 本质是 git fetch + git merge(或 git rebase),它只作用于当前检出的分支,且默认只拉取该分支关联的远程分支(比如 origin/main)。
- 检查是否在正确分支:
git branch看星号在哪;不在目标分支就先git checkout main(或git switch main) - 确认远程追踪关系:
git branch -vv查看当前分支是否显示类似[origin/main];没有的话用git branch --set-upstream-to=origin/main main - 如果有本地未提交改动,
git pull可能失败或自动合并出冲突——此时别硬拉,先git stash暂存再拉,完事用git stash pop
git pull --rebase 和默认 merge 有什么区别?
区别在于怎么整合远程新提交:merge 会生成一个合并提交(Merge commit),rebase 则把你的本地提交“重放”到远程最新提交之后,历史更线性。
- 团队协作中,如果本地只有少量自用提交,
git pull --rebase更干净;但如果你的提交已推送到远程(比如已发 PR),就别 rebase,会改写历史 - 想设为默认行为:
git config --global pull.rebase true,此后所有git pull都等价于git pull --rebase - 注意:rebase 过程中遇到冲突,解决后用
git add . && git rebase --continue,不是git commit
拉不到别人刚 push 的代码?试试这几个检查点
不是网络问题,大概率是本地没拿到远程引用的最新快照。fetch 是 pull 的前置动作,但 pull 默认只 fetch 当前分支,而远程可能新增了分支、删了分支、或改了标签。
- 先手动同步全部远程引用:
git fetch --all(比git pull更彻底) - 看远程有没有新分支:
git ls-remote --heads origin,或git branch -r - 如果要拉一个全新远程分支(比如
origin/feat/login),不能直接git pull,得先git checkout -b feat/login origin/feat/login - 标签默认不随 pull 下载,需要
git fetch --tags
git pull 失败报错 “refusing to merge unrelated histories” 怎么办?
这是 Git 2.9+ 加的安全限制,发生在两个完全没有共同祖先的仓库尝试合并时(比如本地 init 后强行关联了别人的远程库)。
- 临时绕过(仅限你明确知道可以合并):
git pull origin main --allow-unrelated-histories - 更稳妥的做法是先
git remote add,再git fetch,然后用git checkout或git merge显式操作,避免意外覆盖 - 这个错误也常出现在 fork 后长期没同步原仓库,又试图把原仓库当上游拉取——此时应先确认 upstream 是否已正确添加并 fetch 过
真正容易被忽略的是:pull 不是“刷新”,它只做一次整合动作;下次想同步还得再 pull,没人帮你自动轮询。另外,子模块里的远程更新不会被外层 git pull 带动,得单独进子目录处理。










