修改commit信息
场景:刚提交了一个代码,发现有几个字写错了,怎么办,当场再写一个修复这几个错别字的 commit?或者是commit信息写错了?
git commit --amend
在提交时,如果加上 --amend 参数,git 不会在当前 commit 上增加 commit,而是会把当前 commit 里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的 commit,用这个新的 commit 把当前 commit 替换掉。所以 commit --amend 做的事就是它的字面意思:**对最新一条 commit **进行修正。
git add . (若有新修改)
git commit --amend
然后我们会看到提交信息编辑界面:
之后,insert 进入编辑状态,编辑 commit 信息后退出即可。通过 git log 可以验证查看。
需要注意的是:commit --amend 并不是直接修改原 commit 的内容,而是生成了一条新的 commit。
commit --amend 可以修复最新 commit 的错误,但如果是倒数第二个 commit 写错了,怎么办?
rebase -i
rebase -i 是 rebase --interactive 的缩写形式,意为"交互式 rebase"--让用户编辑完成合并操作 (其实 git rebase -i 的完整命令为:git rebase -i [startpoint] [endpoint],如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit。<有关rebase的详细操作--待写>,rebase的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴) 。
如下图,当我提交commit信息“g”之后发现上一次提交信息应该为“f”,但我写成了“ff”:
这时候我们就可以使用 git rebase -i 命令了。
git rebase -i HEAD~2
执行后跳到一个新界面:
由远及近列出了两个commit,前面pick代表的默认使用该提交commit,按i进入编辑模式,修改该字段值,经常使用的如下:
- pick:简写p,启用该commit;
- reword:简写r,使用该commit,但是修改提交信息,修改后可以继续编辑后面的提交信息;
- edit:简写e,使用commit,对其进行修改;
- squash:简写s,使用该commit,并将该commit并入前一commit;
- drop:简写d,移除该commit;
这里把第一个pick改为edit:
然后退出(按esc键退出编辑模式,然后输入:wq,保存当前编辑)
下面的步骤同上面的commit --amend,执行:
git commit --amend
修改完成之后,执行 rebase --continue (git也已经给了提示)来继续 rebase 过程,把后面的 commit 直接应用上去:
git rebase --continue
最后我们可以 git log 查看验证一下