Karp 的技术博客

在使用 Git 推送代码到远程仓库时,常常会遇到如下错误:

! [rejected]        test -> test (non-fast-forward)
error: failed to push some refs to 'http://170.170.170.170/service.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.

✋ 问题解释

这个错误发生的原因是:

  • 你本地的分支(如 test落后于远程分支的最新提交
  • Git 默认为了保护数据,不允许你直接覆盖(非 fast-forward)远程的更改。

换句话说,远程的 test 分支上可能有别人提交的新内容,而你本地的分支并没有包含这些。


✅ 解决方案

根据你的需求和协作场景,有以下几种处理方式:

方法一:拉取远程更新再推送(推荐)

git pull --rebase origin test
git push origin test
  • --rebase 会将你的提交临时移除,先合并远程更新,再重新应用你的更改
  • 优点是:历史更清晰,没有额外的 merge commit

方法二:强制推送(仅限个人项目或确认无远程更改时)

git push --force origin test

⚠️ 警告:这会覆盖远程分支的提交,可能导致其他人的工作丢失!


🔍 查看具体差异(推荐)

你也可以先查看远程分支与本地的差异,确保操作不会造成损失:

git fetch origin
git log HEAD..origin/test --oneline

如果看到有远程提交,你应该先 pull 下来,避免数据丢失。


🧠 总结

操作场景推荐操作
与他人协作,远程有更改git pull --rebasepush
本地变更覆盖远程(确认安全)git push --force
不确定差异git fetch + git log HEAD..origin/branch

💡 附加建议

  • 配合 GUI 工具(如 Sourcetree)可以更清晰查看差异与分支状态
  • 使用分支前建议先 git pull,保持同步

git

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2025年06月27日 14:13
1

目录

来自 《🚧 解决 Git Push 被拒绝的问题:non-fast-forward 错误解析与处理》