git commit --amend 可直接修改上一次提交的描述信息,前提是未推送或获准强制覆盖;执行后默认打开编辑器修改,加 -m 参数可跳过编辑器;该操作会生成新 SHA-1,已推送时需 git push --force-with-lease 同步。

git commit --amend 修改上一次提交信息
直接用 git commit --amend 就能重写最近一次提交的描述,前提是还没推送到远程(或已推但你有权限强制覆盖)。它不会改代码内容,只改提交元数据——但如果你顺手改了工作区文件并暂存了,那这次 amend 会一并把新暂存的改动塞进原提交里,这点容易误操作。
执行后默认打开编辑器(通常是 vim),删掉原有描述,输入新文字保存退出即可。如果想跳过编辑器直接指定新消息,加 -m 参数:
git commit --amend -m "修复用户登录时 token 解析失败"
注意:--amend 本质是“撤销上次提交 + 新建一个提交”,所以 SHA-1 值一定会变。只要没 git push 过,安全;如果已经推了,后续得 git push --force-with-lease 覆盖,别用 --force。
已经 push 过,还能改吗
能,但属于协作高危操作。必须确保:没人基于你那个旧提交继续开发,且团队同意你强制更新。流程是:
- 本地执行
git commit --amend改好描述 - 运行
git push --force-with-lease origin main(把main换成你的分支名) - 如果提示 “non-fast-forward”,说明别人已往该分支推送了新提交——此时不能强推,得先
git pull --rebase整合,再决定是否仍要 amend
--force-with-lease 比 --force 安全,它会检查远程分支是否被他人更新,避免误覆盖别人的工作。
Git post-commit 钩子 + SQLite 提交索引工具。自动将每次提交的元数据(哈希值、作者、分支、仓库、主题)记录到本地 SQLite 数据库中,随后提供一个命令行接口(CLI),支持查询、列表展示、统计、删除和更新记录。 触发场景:管理 Git 钩子、跨仓库查询提交历史、定位某次提交所属的仓库、查看提交统计信息、将提交记录写入本地索引。 当用户提及“提交日志记录”、“提交索引”、“跨仓库查找提交”、“Git 钩子管理”,或希望以结构化方式查询其提交历史时(即使未明确指出该工具),请使
修改更早的提交信息(不是上一次)
git commit --amend 只作用于最近一次。要改倒数第二次、第三次……得用交互式变基:git rebase -i HEAD~3(数字换成你想追溯的提交数)。在弹出的编辑器里,把目标提交前的 pick 改成 reword,保存退出后,会逐个打开编辑器让你重写对应提交的信息。
风险更高:所有被 rebase 的提交 SHA 都会变,涉及多人协作分支时务必谨慎。常见错误是误把 pick 改成 drop 导致代码丢失,或保存时格式不对(比如多空行、漏换行)导致 rebase 中断。
为什么 git log 看不到新描述
改完不生效,大概率是没完成 rebase 流程或 push 失败。检查三件事:
- 执行
git commit --amend后是否真的保存退出了编辑器?vim 里要按:wq,别直接关窗口 - 改完后运行
git log -1确认本地最新提交的 message 是否已更新 - 如果远程也要同步,确认
git push --force-with-lease执行成功,且没有被 CI/保护分支策略拦截(比如 GitHub 的 branch protection 要求 PR 合并,禁止 force push)
最常被忽略的是:以为改了就完了,结果发现同事 git pull 后还是旧描述——因为远程根本没更新,或者他 pull 的是别人推送的新提交,而你的 amend 还卡在自己本地。

















