记录一次git commit --amend的误操作

修改提交信息

git commit --amend

概览

事件原因结果

git commit --amend是修改最近一次的提交,而我在第一次git commit -m "update README.md"时,其实并没有成功,因为我没有git add 添加任何内容,本地仓库没有任何更新的内容。

因为修改完README.md文件后,文件默认在工作区,必须git add 到staged暂存区,执行git commit -m时才能执行提交。

事件经过

事故复盘

我在第一次git commit -m "update README.md"失败后,执行下述操作

bash 复制代码
git add README.md
git status

On branch main

Your branch is up to date with 'origin/main'.

Changes to be committed:

(use "git restore --staged ..." to unstage)

modified: README.md

之后执行

复制代码
git commit --amend

main 4f41cf1\] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Author: Your Username [username@example.com](mailto:username@example.com) Date: Thu Nov 6 01:44:35 2025 +0800 **1 file changed, 3 insertions(+), 1 deletion(-)**

然后进入vim编辑上一次的提交,这里我没有注意显示的是上一次的提交,我直接默认,没有修改任何内容,但是本次git commit --amend,将你刚才做的README.md改变加到上次提交中了, commit的文件hash值已经发生了改变,会导致你的本地最新的一次提交和远程的最新一次提交不一样,

你之后再次 git commit 或者git push 时,会出现一下错误信息

On branch main

Your branch and 'origin/main' have diverged,

and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Merge made by the 'recursive' strategy.

"分支分叉"(diverged) 指的是:

你的本地分支 main 和远程分支 origin/main 各自有新的提交,但 没有共同的祖先提交(即历史提交不同)。

这不是因为远程分支有更新,而是因为你重写了本地历史(git commit --amend 会改变提交哈希值)。

显示本地需要pull合并,其实呢不需要,因为你之后远程分支没有新的提交,但是你会有疑问,命令你本地没有创建新的分支,为什么会有冲突呢,为什么要我进行合并呢

💡 核心误解:Git 以为远程分支有新提交(origin/main 有新内容),所以要求你 git pull。

但实际远程没有新提交(你从未推送过),只是你本地重写了历史。

这时有两种解决办法,

解决办法一

继续按照现在的,将你本次修改的README.md文件,加入到上次的提交中,已经自动合并结束,你可以再次查看README.md文件,查看你的更改是否存在。

这时你只需要git push --force origin main即可,覆盖远程最新的提交。

解决方法二

如果你不想将这一次的提交融入上一次的提交,

1.你就需要再次git commit --amend 把你刚才的修改删除,再次git commit -m 此时你的本地commit提交历史就会多一个commit hash值,

2.我是因为再次执行git commit 时报出上面错误,我执行了git pull 拉取远程最新提交,做了merge,本次出现了产生一次新的commit信息,

9f9a301 (HEAD -> main) Merge branch 'main' of /https://github.com/mr/repositories into main

4f41cf1 Add code ******

改变工作指针,指向上一次最新的提交4f41cf1 ,这个提交呢其实是 并没有包括你READMD.md的提交,跟远程分支保持一致,我猜测是因为我git pull,我本地最新的一次提交和和远程最新的提交有冲突,git 自动合并recursive 机制,又重新创建了一个提交节点,以远程最新提交为基节点,将我本地git commit --amend修改的最新提交信息,合并到了一个新的节点.画了个图

bash 复制代码
git reset --hard origin/main
vim README.md # 此时退回到仓库初始状态,再次修改,查看git status
git status

On branch main

Your branch is up to date with 'origin/main'.

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git restore ..." to discard changes in working directory)

modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")

复制代码
git add README.md
git  commit -m "Add update README.md"
git push
相关推荐
TOPGUS1 分钟前
谷歌SEO第三季度点击率趋势:榜首统治力的衰退与流量的去中心化趋势
大数据·人工智能·搜索引擎·去中心化·区块链·seo·数字营销
胖虎112 分钟前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
2501_933670791 小时前
2026 高职大数据与会计专业零基础能考的证书有哪些?
大数据
ClouderaHadoop1 小时前
CDH集群机房搬迁方案
大数据·hadoop·cloudera·cdh
TTBIGDATA1 小时前
【Atlas】Ambari 中 开启 Kerberos + Ranger 后 Atlas Hook 无权限访问 Kafka Topic:ATLAS_HOOK
大数据·kafka·ambari·linq·ranger·knox·bigtop
程序员清洒2 小时前
CANN模型部署:从云端到端侧的全场景推理优化实战
大数据·人工智能
lili-felicity2 小时前
CANN多设备协同推理:从单机到集群的扩展之道
大数据·人工智能
pearbing3 小时前
天猫UV量提高实用指南:找准方向,稳步突破流量瓶颈
大数据·uv·天猫uv量提高·天猫uv量·uv量提高·天猫提高uv量
Dxy12393102165 小时前
Elasticsearch 索引与映射:为你的数据打造一个“智能仓库”
大数据·elasticsearch·搜索引擎
岁岁种桃花儿5 小时前
Kafka从入门到上天系列第一篇:kafka的安装和启动
大数据·中间件·kafka