Menu
CoddyTech

Git Commit --amend

最后更新

git commit --amend 用一个新提交替换最近的一次提交,让你可以修正提交信息,或者补上忘记暂存的文件。它不会新增第二个提交,而是改写上一个提交。由于这会改变提交的哈希值,所以只修改还没有推送的提交。

在终端在线编辑器中试试这些命令:浏览器里就有一个真正的 shell,无需安装任何东西。

git commit --amend 用改写后的提交替换最后一次提交,而不是再新增一个提交。

语法

命令作用
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 课程也会一步步讲解如何修改提交。
Coddy 编程语言插图

在 Coddy 学习 Git

开始