Git 推送失败问题解决指南

当执行 git push -u origin master 时遇到类似以下错误:

error: failed to push some refs to 'http://xxxx.cn/vip/xxx.git'
To http://xxxx.cn/vip/xxx.git
! refs/heads/master:refs/heads/master [rejected] (fetch first)
Done
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.

或简化版错误:

[rejected]   master -> master (fetch first)    
error: failed to push some refs

这是 Git 常见的版本冲突问题,原因是远程仓库存在本地没有的更新,为防止覆盖远程变更而拒绝推送。

推荐解决方案

最简洁高效的处理方式是执行以下命令:

# 拉取远程master分支并以rebase方式整合本地更改
git pull --rebase origin master

# 完成整合后再次推送(-u参数会建立本地与远程分支的关联)
git push -u origin master

这种方式会:

  1. 将远程最新更改下载到本地
  2. 以线性方式重新应用你的本地提交
  3. 建立本地与远程分支的关联关系

备选解决方案(适用于复杂冲突)

如果遇到复杂的代码冲突,可使用标准合并流程:

# 拉取远程更新并合并到本地
git pull origin master

# 若出现冲突,编辑冲突文件后标记为已解决
git add <冲突的文件路径>

# 提交合并结果
git commit -m "合并远程更新并解决冲突"

# 推送本地更改
git push origin master

注意事项

  • git pull --rebase 会改写提交历史,保持提交记录更整洁
  • 多人协作时,推送前先拉取是良好习惯
  • 解决冲突时需仔细检查代码,确保逻辑正确
  • 首次推送分支时,-u 参数只需使用一次,后续可直接用 git push
    以上方法可解决绝大多数推送失败问题,推荐优先使用 git pull --rebase 方式,它能更优雅地处理分支同步问题。