git本地提交后,解决push被拒绝 error: failed to push some refs to

前言

下午改完需求

bash 复制代码
git add .
git commit -m "feat: 新增推荐接口"
git push origin dev

结果终端突然翻脸:

复制代码
! [rejected]        dev -> dev (fetch first)
error: failed to push some refs to 'github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do not have locally.

Git 贴心地提示:先 git pull 把远程新提交合并进来。

我照做,却又被泼一盆冷水:

复制代码
hint: You have divergent branches and need to specify how to reconcile them.
fatal: Need to specify how to reconcile divergent branches.

一句话总结:本地与远程分叉了,Git 不知道听谁的,干脆罢工。


原因

  1. 远程仓库在我本地开发期间又多了新提交(同事 merged PR)。
  2. 我本地也产生了新的 commit,但还没 push。
  3. 两者从同一个祖先分叉(diverged),Git 默认拒绝"覆盖"远程历史。

需求

我不想保留本地这次 commit,只想让本地代码完全回到远程最新状态 ,相当于"我什么都没改"。

于是目标变成:撤回本地 commit,并丢弃对应改动


操作步骤(放弃本地 commit 版)

  1. 先把远程最新状态拉下来(只更新远程跟踪分支,不影响本地)

    bash 复制代码
    git fetch origin
  2. 强制让当前分支指针回到远程版本,同时清空工作区

    bash 复制代码
    git reset --hard origin/dev
    • --hard 会连同工作区一起回退,本地改动全部丢失,请确保不需要它们。
    • 如果只想保留改动,用 --soft--mixed,详见文末彩蛋。
  3. (可选)再次推送

    bash 复制代码
    git push origin dev

    此时由于本地与远程一致,push 直接成功。


疑问

疑问 解答
撤回后能找回原来的 commit 吗? 只要没有 git gc,可用 git reflog 找回哈希值,再 git cherry-pickgit branch 切回来。
已经 push 了还能这样撤回吗? 可以,但需要 git reset 后加 git push --force-with-lease会改写远程历史,团队慎用!
下次不想手动选策略? 设置默认 pull 行为:git config pull.rebase truegit config pull.ff only

三分钟速记表

目标 命令
撤回最近 1 次 commit,代码保留在暂存区 git reset --soft HEAD~1
撤回最近 1 次 commit,代码退回工作区 git reset --mixed HEAD~1
撤回最近 1 次 commit,连代码一起丢 git reset --hard HEAD~1
本地直接同步远程分支(放弃所有本地提交) git fetch origin && git reset --hard origin/分支名

总结

Git 不会替你决定"谁对谁错",它只会把选择权交给你。

下次遇到"fetch first"别慌,先想清楚:是要合并,还是要放弃

一旦确认放弃,就 fetch + reset --hard,一刀两断,世界瞬间安静。

相关推荐
不搞学术柒柒13 分钟前
Git新功能完整开发提交流程
git
阿里云大数据AI技术1 小时前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
阿里云大数据AI技术1 小时前
FalconSeek 技术解析:阿里云 Elasticsearch 云原生内核如何让查询性能飙升600%
人工智能·elasticsearch
Elastic 中国社区官方博客2 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
abcy0712132 小时前
storm核心实时机制
大数据·storm
灵机一物2 小时前
合伙制律所分红和提成律师个税怎么合规优化?
大数据·人工智能
北五环小裁缝3 小时前
Coding工具搜索不够全?我做个 deuseek:一条命令补齐全网搜索
人工智能·搜索引擎
Elasticsearch3 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
elasticsearch
午安~婉5 小时前
Git中SSH连接
前端·git·gitee
Elastic 中国社区官方博客5 小时前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
大数据·功能测试·elasticsearch·搜索引擎·全文检索·可用性测试