Git Commit --amend
最后更新
git commit --amend 用一个新提交替换最近的一次提交,让你可以修正提交信息,或者补上忘记暂存的文件。它不会新增第二个提交,而是改写上一个提交。由于这会改变提交的哈希值,所以只修改还没有推送的提交。
在终端在线编辑器中试试这些命令:浏览器里就有一个真正的 shell,无需安装任何东西。
语法
| 命令 | 作用 |
|---|---|
git commit --amend | 编辑上一次提交及其提交信息 |
git commit --amend -m "new message" | 直接在命令中修改上一次的提交信息 |
git commit --amend --no-edit | 加入已暂存的文件,提交信息不变 |
常见用法
| 目标 | 命令 |
|---|---|
| 修正上一次提交信息中的错别字 | git commit --amend -m "fixed message" |
| 把忘记的文件加到上一次提交中 | 先 git add file,再 git commit --amend --no-edit |
| 修改已经推送的提交(要小心) | 先 amend,再 git push --force-with-lease |
Git commit --amend 常见问题
如何修改上一次的提交信息?
运行
git commit --amend -m "new message" 直接替换,或者运行 git commit --amend 打开编辑器重写。这会用新的提交信息改写上一次提交。除非你准备好强制推送,否则不要对已经推送的提交这样做。如何把忘记的文件加到上一次提交中?
先用
git add <file> 暂存文件,再运行 git commit --amend --no-edit。--no-edit 选项会保留原有的提交信息,只把新暂存的更改并入上一次提交。git commit --amend 会创建新提交吗?
不会新增提交,它会替换上一次提交。结果看起来仍然只有一个提交,但从技术上讲,它是一个哈希值不同的新提交,取代了原来的那个。这就是为什么修改共享历史需要强制推送。
修改已推送的提交安全吗?
要谨慎。amend 会改写提交,所以推送之后你需要运行
git push --force-with-lease,这可能会影响已经拉取了原提交的人。在共享分支上,最好新建一个提交或者使用 git revert,而不是 amend。可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里真正的 shell 中运行
git commit --amend,无需安装任何东西。Coddy 免费的互动式 Git 课程也会一步步讲解如何修改提交。