You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Git推送后执行git commit --amend引发的分支分歧问题

问题描述

我先做了两次修改并提交,推送到裸仓库:

edit 1
git commit -a
edit 2
git commit -a
git push

之后我修改了已推送到裸仓库的最新提交(用git commit --amend),接着又做了多次修改提交:

edit 3
git commit --amend
edit 4
git commit -a
edit 5
git commit -a

现在Git状态显示分支分歧:

git status

On branch master
Your branch and 'origin/master' have diverged,
and have 6 and 1 different commits each, respectively.
  (use "git pull" if you want to integrate the remote branch with yours)

nothing to commit, working tree clean

我知道不该修改已推送的提交,但已经操作了,请问该怎么解决?

解决方法

情况1:远程仓库仅你使用/团队允许改写历史

你修改了已推送到远程的提交,导致本地和远程的提交历史出现分歧。如果这个远程仓库只有你在用,或者团队明确同意改写远程历史,可以直接强制推送本地分支覆盖远程:

git push -f origin master

注意:强制推送会替换远程仓库的原有提交历史,如果有其他开发者已经拉取过旧版本的代码,他们的本地仓库会出现冲突,必须先和团队沟通确认后再执行。

情况2:不能改写远程历史(多人协作场景)

如果不允许改写远程历史,就通过合并的方式整合远程与本地的历史,再推送:

  1. 拉取远程分支,使用--no-ff参数生成一个显式的合并提交,保留两边的提交历史:
git pull --no-ff origin master
  1. 若拉取过程中出现冲突,先手动解决冲突,然后提交合并结果:
git commit -a
  1. 最后将合并后的分支推送到远程:
git push origin master

这种方式不会修改远程原有历史,仅新增一个合并提交,不会影响其他协作开发者的本地仓库。

内容的提问来源于stack exchange,提问作者phunsoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 05:27:27