已经 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. 工作区里那个已修改但没勾选的文件不会受到任何影响,可以在下一次准备好时再提交。
相关推荐
冬奇Lab1 天前
一天一个开源项目(第35篇):GitHub Store - 跨平台的 GitHub Releases 应用商店
开源·github·资讯
Jahzo1 天前
openclaw桌面端体验--ClawX
人工智能·github
逛逛GitHub1 天前
6个粉丝推荐的 GitHub 项目,收藏一波。
github
MaoPou1 天前
Hello Haxe篇
github
Bigger1 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1232 天前
matlab画图工具
开发语言·matlab
dustcell.2 天前
haproxy七层代理
java·开发语言·前端
norlan_jame2 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc