在日常开发中,经常会遇到这样的情况:执行了 git pull 拉取远程更新后,发现本地代码好像什么都没变。刷新页面、重启服务都没用,新功能还是出不来。这时候别急着怀疑人生,问题可能出在几个常见的环节上。
1. 确认是否真的拉到了新提交
先检查一下当前分支的状态。运行下面的命令:
git status
如果提示 “Already up to date”,说明本地和远程确实没有差异。但有时候你可能不在正确的分支上。比如远程更新的是 main 分支,而你当前在 dev 分支,自然看不到变化。
切换到正确分支:
git checkout main
git pull origin main
2. 查看提交历史确认变更是否存在
运行:
git log --oneline -5
看看最近几次提交里有没有你期待的更新记录。如果没有,说明远程也没推上去,或者推到了其他分支。
3. 缓存问题容易被忽略
前端项目尤其常见。浏览器会缓存 JS、CSS 文件,即使代码更新了,页面加载的仍是旧资源。可以尝试强制刷新(Ctrl + F5 或 Cmd + Shift + R),或者打开开发者工具,勾选“Disable cache”后再刷新。
如果是构建工具生成的静态文件,比如 webpack 打包后的文件名带 hash,那要确认新构建是否已部署。否则哪怕代码变了,访问的依然是旧的 bundle.js。
4. 服务器没重启或热重载失效
Node.js、Python Flask 这类服务不会自动加载修改后的代码。git pull 之后记得重启服务:
pm2 restart app
# 或者
systemctl restart myapp
某些热重载机制也不一定可靠,特别是配置复杂或监听失效时,手动重启最保险。
5. 子模块或依赖没更新
项目用了 Git Submodule 或者把部分逻辑抽成私有 npm 包,只拉主仓库是不够的。需要额外更新子模块:
git submodule update --init --recursive
或者重新安装依赖:
npm install
不然看到的只是主工程的壳,核心改动在依赖里根本没进来。
6. 工作区有未提交的修改
如果你本地改了文件但没提交,Git 为了防止冲突,可能会拒绝合并新内容。运行 git status 能看到“Changes not staged”的提示。这时候可以先暂存:
git stash
git pull
git stash pop
再处理可能出现的冲突。
7. 拉取的是错误的远程地址
多人协作时,有时会 fork 项目,远程 origin 指向的是自己的仓库而不是上游。这时候 pull 的其实是你自己之前的内容。查看远程地址:
git remote -v
确保 origin 指向的是主仓库,或者你需要同步的那个源。