已经 Push 到远程的提交,如何修改 Commit 信息?

在 IDEA 中写完了新增各种工具类的代码,完成了 Commit 和 Push,代码已经到了 GitHub远程仓库。

继续写着下一个功能的代码,突然,我发现刚才的Commit Message少写了一个已经完成的功能实现。

此时,我的工作区里已经有正在修改但暂时还不想提交的文件:

于是,我使用了 IDEA 的修正提交功能,补全了信息,重新点击了 Commit:

但是,当我再次点击 Push 时,出现了如下报错:

bash 复制代码
error: failed to push some refs to 'github.com:xxx/xxx.git'
!	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.

这个错误说人话就是:推送到远程被拒绝了!并且Git 提示你需要先 Pull。

原因分析

远程仓库 保存着修改前的那次提交,我们把它记为 Commit A;

本地仓库 在我使用修正 功能时,Git 并没有直接修改 Commit A,而是把 Commit A 扔掉了,生成了一个全新的 Commit A',这个新的commit有着新的 Hash 值,新的备注。

当我点击 Push 时,远程仓库发现现在推送的 Commit A' 和已有的 Commit A 对不上,为了防止覆盖代码,Git 默认拦截了这次推送。

解决方案

本来我想使用 IDEA 的图形界面,但是,强制推送的按钮居然是灰色的,选不上。

所有,我使用命令行,在 IDEA 下方的 Terminal 中输入以下命令:

bash 复制代码
git push -f origin main

之后,就推送成功了。

小贴士

  1. 这样操作后,GitHub 上并不会多出一条记录,GitHub 上的记录会原地刷新。旧的提交(也就是少信息的那个)会被彻底删除,取而代之的是修改后的新提交。历史记录看起来非常干净,就像从来没有犯过错一样。
  2. 工作区里那个已修改但没勾选的文件不会受到任何影响,可以在下一次准备好时再提交。
相关推荐
周GZ15 分钟前
简单讲解Java中静态方法与 实例方法
java·开发语言
向上的车轮1 小时前
GitHub Actions 自动化运维实战:Rust 全栈项目 CI/CD 至华为云
运维·自动化·github
大白同学4212 小时前
初识Qt——创建第一个Qt项目
开发语言·qt
祈禾2 小时前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
吴声子夜歌2 小时前
正则指引——Ruby
开发语言·正则表达式·ruby
nnerddboy2 小时前
Rust教程06:ESP32-rust环境搭建
开发语言·后端·rust
nnerddboy2 小时前
Rust教程03:函数,控制流与所有权
开发语言·后端·rust
linux修理工2 小时前
内存占用 99% 且 Java 程序较多的优化建议
java·开发语言
weixin_460443562 小时前
企业考试系统如何对接OA、钉钉和企业微信?SSO单点登录、组织同步与权限一致性设计
java·开发语言·数据库
nnerddboy3 小时前
Rust教程05:结构体,枚举与模式匹配
开发语言·网络·rust