前言

在我们创建了commit后,发现commit的message描述不准确,需要将最近创建的commit的message进行修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 G:\mygitea\GitLearn\learn03   master 
$ git log
commit 41f7a2f72d11aac689c8eb743c4b44eb6604ae78 (HEAD -> master)
Author: GitHub Whiteco-okie <GitHub 1961663351@qq.com>
Date: Wed May 11 09:04:28 2022 +0800

Second commit

commit dab1693e9e6653446d1c2acd636b17b655b56ee9
Author: GitHub Whiteco-okie <GitHub 1961663351@qq.com>
Date: Wed May 11 09:03:42 2022 +0800

Second commit

commit 8653890b85a24cf2f9dd5b95dad6a6de413b4223
Author: GitHub Whiteco-okie <GitHub 1961663351@qq.com>
Date: Wed May 11 09:02:40 2022 +0800

First commit

可以看到,最新一次commit信息和前面的commit信息重合了,需要调整。

1
2
 G:\mygitea\GitLearn\learn03   master 
$ git commit --amend # 修改最近的commit

此时会弹出如下界面,我们可以对message进行修改。

修改后:

1
2
3
4
5
6
7
8
9
10
11
12
13
 G:\mygitea\GitLearn\learn03 
$ git commit --amend
[master c1be257] Third commit
Date: Wed May 11 09:04:28 2022 +0800
1 file changed, 1 insertion(+)

G:\mygitea\GitLearn\learn03   master 
$ git log -n1
commit c1be25756d4945790ee3a930284e5d7448b12fee (HEAD -> master)
Author: GitHub Whiteco-okie <GitHub 1961663351@qq.com>
Date: Wed May 11 09:04:28 2022 +0800

Third commit

总结

git commit —amend 命令应该是代替(或这说修改)上一次提交,不只是修改message。 比如上一次提交时有几个文件没有add以及commit,可以重新进行add之后再commit —amend提交。 但这次提交之后不会增加一次新的commit,而是相当于在上一次commit的基础上进行修改。

关于 git commit —amend 的编辑 Linux下 git默认的文本编辑器是nano,很多快捷键不熟悉,执行下面的命令可以将git的文本编辑器改为我们熟悉的vim git config —global core.editor vim

Q1:—amend 不只是修改最新commit的message 而是会创建一个将暂存区的内容生成一个commit,再将当前最新的commit替换成新生成的那一个

改了commmit的message,本来的commit属性发生变化了,commit肯定也会变。

Q2:能否指定某次commit去修改commit的message呢?

可以的。用 rebase -i 交互式rebase,对某个commit采用edit的方式

Q3:如果已经把提交的内容push 到远端仓库了,但是要修改提交的message 。git commit —amend 然后在git push 吗?

如果是个人的分支,已经push到远端的话,得用push -f 了

有时候无法输入wq,可以试试按一下ESC键,再输入2个大写的Z,就能保存并退出了。