git commit --amend 可修正上一次提交信息或追加改动,但会生成新 commit-id;未推送时可直接使用,已推送需强制推送,但可能破坏协作历史与依赖该 id 的流程。

可以直接用 git commit --amend 修正上一次提交,无需重写历史或额外暂存——但前提是还没推送到远程,或你愿意后续强制推送。
修正提交信息(最常见场景)
刚执行完 git commit -m "fix bug",发现消息写成了 "fix bgu",或者想补充更准确的描述。
- 直接运行
git commit --amend,会打开默认编辑器(如 vim),光标停在原提交信息处,改完保存退出即可 - 如果只想快速替换,加
-m参数:git commit --amend -m "Fix login timeout bug" - 注意:这个操作会生成**新 commit-id**,旧提交实际被丢弃(只是 HEAD 指针前移)
把新改动追加进上一次提交
你提交后又改了 utils.js,想让这次修改也“塞进”刚提交的那次里,保持逻辑原子性。
- 先
git add utils.js(必须暂存,否则--amend不会包含它) - 再执行
git commit --amend --no-edit:保留原提交信息,只追加文件 - 如果同时要改信息,去掉
--no-edit,让它进编辑器改 - ⚠️ 常见错误:漏掉
git add就直接--amend,结果新改动根本没进去
已经推送到远程怎么办?
执行 git commit --amend 后,git push origin main 会失败,提示 non-fast-forward。
- 必须用
git push -f origin main(或--force-with-lease更安全) - 如果别人已基于你原来的提交做了开发,强制推送会导致他们本地历史错乱,需协调重拉
- 团队协作中,只要远程已有该提交,就别轻易
--amend;宁可另提一个fixup提交
真正容易被忽略的是:即使只改提交信息,也会改变 commit-id。Git 所有后续依赖这个 ID 的操作(比如 git bisect、CI 流水线缓存、PR 关联)都会失效。所以别把它当成“无害小操作”。











