git commit --amend 是首选,因为它直接覆盖重写最近一次提交:将暂存区内容(含补加文件)打包为新提交,替换旧提交,保留时间戳、作者信息和父提交,仅改变哈希,适用于本地未推送场景。

直接用 git commit --amend 补上漏掉的文件,不用删提交、不丢历史、不改分支指针。
为什么 git commit --amend 是首选
它不是“撤销”,而是“覆盖重写最后一次提交”:把暂存区当前内容(含新 add 的文件)打包成一个新提交,替换掉旧的。提交哈希会变,但时间戳、作者信息、父提交都保留,语义上仍是“那次提交本该这样”。
- 只影响本地未推送的提交;如果已
push,就不能直接用——别人仓库里已有旧哈希,强制覆盖会破坏协作 - 不能用于修正中间某次提交(比如第 3 次漏了文件,现在是第 5 次),只能修最近一次
- 执行后原提交对象不会立即消失,仍可通过
reflog找回,但没必要——你只是让它“不可达”了
操作步骤:补文件 + 改提交信息(可选)
假设你刚执行了 git commit -m "feat: add user login",但发现漏了 auth.js 和 login.test.js:
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 先加漏掉的文件:
git add auth.js login.test.js - 再运行:
git commit --amend - 编辑器会弹出原提交信息,可直接保存(不改信息),或修改后保存
- 如果只想补文件、完全不想动文字,加
-C HEAD参数:git commit --amend -C HEAD
git reset --soft HEAD~1 不如 --amend 直接
有人习惯先 reset --soft 再重新 commit,这多了一步且容易出错:
- 必须手动确保所有该进暂存区的文件都在(比如你上次
add过的、这次又改过的,容易漏) - 要自己复制粘贴原提交信息,或用
--reuse-message=HEAD,不如--amend自带继承 - 如果误用了
--mixed或--hard,工作区或暂存区状态就乱了
已推送到远程怎么办?
如果已经 git push origin main,且别人可能已拉取,不要用 --amend + push --force。
- 安全做法是:用
git revert创建一个新提交来撤回原提交,再另起一次正常提交补上漏掉的文件 - 或者,如果确认没人基于它开发(比如刚推完、只有你自己在用),可以
git push --force-with-lease origin main,但必须提前跟协作者同步 - 注意:
--force-with-lease比裸--force安全,它会检查远程引用是否被他人更新过
真正容易被忽略的是:补文件这件事,和“有没有 push”强绑定——没推,--amend 是最干净的;一推,就得切换思路,把它当成一次协作事件来处理,而不是单机操作。

















