Git使用之如何修改commit注释

前言

我们在开发的时候, 有时候可能会需要对历史commit进行注释的修改, 那么可以采用以下几种方法

详解

分为以下三种情况:

1. 修改最近一次commit

如果你只想修改最近一次commit的注释, 那么可以执行以下命令:

1
git commit --amend

执行后会出现vim编辑窗口, 在里面修改注释然后保存退出即可

2. 合并修改最近几次commit

如果我们想对最近几次commit进行合并然后重新注释, 我们可以使用reset --soft 进行提交撤销操作, 比如撤销最近三次提交:

1
git reset --soft HEAD^3

命令执行后, 前三次提交的内容将全部恢复到未提交状态, 此时我们可以添加注释重新提交

3. 修改历史commit

如果需要修改的不是最近几次commit, 那么需要用到rebase指令,

假设我们需要将以下第二个记录的注释进行修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
commit def5adef853da4cc05752bdb36577c127be71ba5
Author: xxx
Date: Thu Dec 28 16:01:36 2017 +0800

优化代码

commit f36801544670e00b2f59a28e19017d2786c4085e
Author: xxx
Date: Thu Dec 28 15:59:46 2017 +0800

修复

commit 00b2f59a28e19017d2786c4085e9a28e19017d278
Author: xxx
Date: Thu Dec 28 16:59:46 2017 +0800

修复bug
(END)

那么我们执行以下命令:

1
2
3
4
git rebase -i 00b2f59

或者
git rebase -i HEAD~3

这里的commit id是需要进行修改commit的前一个, 命令执行后, 会自动打开vim文本编辑器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pick 00b2f59 修复bug
pick f368015 修复
pick def5ade 优化代码

# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out~

接下来, 我们需要对该内容进行修改, 首先我们需要来了解几个指令含义:

  • pick: 表示保留该commit
  • reword: 表示修改该commit的注释
  • edit: 表示保留该commit 同时对代码内容进行修改
  • squash: 表示将该commit合并到上一个commit
  • fixup: 表示将该commit合并到上一个commit 同时丢弃该commit注释
  • exec: 执行shell
  • drop: 删除该commit

这里我们使用reword指令进行合并, 内容修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pick 00b2f59 修复bug
reword f368015 修复
pick def5ade 优化代码

# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out~

表示对f368015这个commit进行注释修改

wq内容保存后, 将进入到注释修改编辑页:

1
2
3
4
5
6
# This is a combination of 2 commits. 

修复
# Please enter the commit message for your changes. Lines starting 

# with '#' will be ignored, and an empty message aborts the commit.

我们可以对注释进行修改,然后保存退出即可

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%