git 如何修改已提交的commit的作者信息

git在多人协同开发时,有时候你的提交的节点中的作者信息可能会在不经意间变成别人的信息。我们以大写字母代表分支,下划线加小写字母代表提交,表示这个问题:

图中可以看到,红框圈中的节点,里面的作者信息由最初的qwer变成了qqq

但是在公司中,你的提交就是你的工作量,所以作者信息一定要正确,才能保护好自己碗里的肉。那么我们应该如何修改这些已经提交的节点中的作者信息呢?

答案是万能的rebase。下面我们一步一步来:

首先要告诉你的是,这里的三处节点中问题,我们要分为两次才能处理完。3、4可以同批次处理完,6要单独的一次。

首先我们处理看起来比较麻烦的一批,即3和4这两处。

我们先在sourcetree中的节点2处,右键,选择“复制SHA到剪切板”,复制出来的是节点2处的commit id。

然后在sourcetree中打开git的命令行模式:

git 如何修改已提交的commit的作者信息_第1张图片

然后输入如下格式的命令:

git rebase -i "commit id"

这里的commit id 即为刚刚我们复制的SHA。

然后会跳出如下内容:

git 如何修改已提交的commit的作者信息_第2张图片

对应到我们的例子即为:

pick M_c ---(我没写comment,所以用---代替)
pick M_d ---(我没写comment,所以用---代替)
pick M_e ---(我没写comment,所以用---代替)
pick M_f ---(我没写comment,所以用---代替)

# Rebase abcb9d0..bd81df5 onto abcb9d0 (4 command)
#
# 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

可以看出节点的信息在这里面是倒序的,最新的提交排在最后一位。

然后我们使用VIM指令,先按“ESC”键,然后按“S”键,这时候指令窗会在下侧提示你已经入“插入”模式。然后我们将要修改的提交前面的“pick” 改为“edit” 或者 “e”。例如本例中我们应该修改如下:

e M_c ---(我没写comment,所以用---代替)
e M_d ---(我没写comment,所以用---代替)
pick M_e ---(我没写comment,所以用---代替)
pick M_f ---(我没写comment,所以用---代替)

# Rebase abcb9d0..bd81df5 onto abcb9d0 (4 command)
#
# 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

然后我们再次按“ESC”键,然后再输入“:wq”,然后回车。代表我们已经保存了文本内容并退出了VIM编辑器。

然后指令框会出现下面的提示:

git 如何修改已提交的commit的作者信息_第3张图片

amend是修正的意思,它可以用来修改已提交的有错的错误文件,但是我们这里不要它,我们使用下面的命令:

git commit --amend --author "正确的作者信息"

所以在本例中我们应该输入如下命令:

git commit --amend --author "qwer " --no-edit

然后我们就一路git rebase--continue 直到没有可变基的内容。然后会出现如下提示:

此时我们再看sourcetree中的树就会变成如下:

此时3、4中错误的作者信息就被修改了。

然后M_f节点处错误的作者信息也可以这样修改。

你可能感兴趣的:(sourcetree,gitlab)