Git 提交信息(commit message)写错了怎么修改
最近一次提交用 git commit --amend -m "新信息";已推送且无人拉取时可强推:git push --force-with-lease。历史中间的提交信息用 git rebase -i 标记 reword 修改。共享分支不要改写已推送历史。
还没推送的最近一次提交:git commit --amend -m "正确的信息" 即可。 已推送但确认没人拉取过时,amend 后用 git push --force-with-lease 强推覆盖。要改的不是最近提交,用交互式 rebase 的 reword。
改最近一次提交
git commit --amend -m "正确的提交信息"
# 已推送(确认安全的前提下):
git push --force-with-lease
改历史中间的提交信息
git rebase -i HEAD~5
# 把目标提交行的 pick 改成 reword(或 r),保存
# 逐个弹出的编辑器里修改提交信息
什么时候不能改
- 别人已经基于你的提交拉了代码、开了分支——改写历史会让他们的历史分叉;
- main/master 等共享分支上很早的提交——收益远小于协调成本;
- 不确定就遵循原则:只在个人分支、合并前改写。
写好提交信息的建议
- 首行 50 字内概括"做了什么",正文解释"为什么";
- 用祈使句("修复登录超时"而不是"修复了登录超时");
- 团队可接入 commitlint 强制 Conventional Commits 格式(feat:/fix:/docs:...)。
常见问题(FAQ)
Q:amend 会影响提交的哈希吗?
会。amend 产生全新提交(哈希改变),旧提交成为孤立对象。这就是为什么已推送的 amend 必须强推。
Q:只是漏加了文件也要改信息吗?
漏文件不用改信息:git add 漏掉的文件 && git commit --amend --no-edit,把文件补进同一提交。
Q:强推后同事的仓库会怎样?
他们 pull 会遇到历史分叉,需要 git fetch && git reset --hard origin/分支 对齐。所以改写共享历史前必须沟通。