git commit --amend 是什么
git commit --amend 用来修补最近一次提交:把当前暂存区的内容并进上一条提交,或者只改提交信息。它不会新增一条提交,而是生成一条替换原提交的新提交,因此哈希会变化。默认保留原作者与作者时间,更新提交者与提交时间。
和 rebase -i 的分工
只需要改最近一条时,amend 最省事;要改历史中更早的提交,就得用 git rebase -i 配合 edit 或 reword。一条实用的判断标准是:问题只出在刚刚提交的那条上就用 amend,涉及多条就用交互式变基。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git commit --amend [--no-edit] [-m <信息>] |
| 效果 | 替换最近一条提交,哈希发生变化 |
| --no-edit | 沿用原提交信息,只补内容 |
| --reset-author | 把作者改成当前用户并刷新作者时间 |
| 适用边界 | 仅最近一条,多条需要用 rebase -i |
典型使用场景
- 补漏文件:提交后才发现有文件忘了 add,用它补进去
- 修正信息:提交信息写错字,或漏了关键背景说明
- 清理临时内容:发现把调试语句一起提交了,改掉再 amend
- 合并琐碎提交:刚提交完又做了一点小修补,合并进上一条
- 更新签核:需要变更提交者归属时使用 --reset-author
常用示例
常用示例
git add forgotten.txt # 先把漏掉的文件加入暂存区
git commit --amend --no-edit # 沿用原信息,把文件补进上一条
git commit --amend -m 'fix: 修正重试判断' # 重新写提交信息
git commit --amend --reset-author # 更新作者与作者时间
git log -1 --stat # 核对修补后的提交内容
git push --force-with-lease origin feature # 已推送时安全覆盖远端常见用法与结果
| 用法 | 作用 | 注意 |
|---|---|---|
| amend --no-edit | 补内容,信息保持不变 | 最常用的一种 |
| amend -m <信息> | 补内容并改写信息 | 两者一起生效 |
| amend --reset-author | 更新作者身份 | 作者与作者时间都会刷新 |
| amend --no-verify | 跳过钩子校验 | 谨慎使用 |
已推送的提交 amend 之后必须强推,会改写他人看到的历史。共享分支上先确认没有同事基于旧提交继续工作。
动手前先用 git status 复核暂存区:amend 会把当前暂存区的内容一并并入,如果不注意,之前 add 的其它文件也会被带进这条新提交。