已经 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. 工作区里那个已修改但没勾选的文件不会受到任何影响,可以在下一次准备好时再提交。
相关推荐
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
逛逛GitHub1 天前
面壁智能开源了支持音色设计、克隆、30语言+9 种方言的语音大模型
github
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
小领航1 天前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
李同学Lino1 天前
别再让Agent瞎写屎山代码了!带你用Superpowers重塑Vibe Coding体验(附保姆级教程)
github
cch89181 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense1 天前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++