git高级浅入之当我们需要修改某次commit信息

这节内容主要谈两个比较常见的操作,去修复我们需要修改的commit信息。

有时候,我们会发现我们所提交的信息可能写错了,需要修改怎么办?这种情况主要分为以下两种:

  • 修改最近一次的提交信息
  • 修改指定的某一次提交信息

1. 使用git commit amend修改最近一次的提交信息

git初级浅入的那一章有简单的谈到这一操作,今天我们再来讨论一下。

git commit –amend 更改最近一次提交的信息,这个操作就优秀了,目前我发现的大致是以下两个用处

  • 1.比如我上一次提交的是修改了某个bug,这一次我又是修改了那个bug,然后我要将这一次的修改和上一次的提交用同一个commit备注,那么你可以使用这个命令,将会使用上一次的commit备注信息,同时生成一个新的commitId,
  • 2.你想把本次的修改提交到上一次的提交中,并且把上一次备注的提交信息改成这次的

实际实践一下看看:我们先新建一个仓库,然后创建个test.js文件,然后commit一下,然后我们要修改这一次commit的信息。
我们先git log当前状态如下
《git高级浅入之当我们需要修改某次commit信息》
然后git commit –amend进入编辑
《git高级浅入之当我们需要修改某次commit信息》

我们修改上一次提交信息,把它改成 [fix]: try git commit –amend,然后保存退出,git log看一下
《git高级浅入之当我们需要修改某次commit信息》
我们观察上述结果,发现已经将上一次的提交信息给更改为我们想要修改的内容了,并且我们会发现,当前commit已经合并了上一次commit生成了新的id。

那么,我们需要修改的commit信息不是最近一次的咋办?

2. 使用git rebase -i 来修改某一次的提交信息

2.1 先铺垫下知识点

git rebase -i master^^    // 假设我们当前在master分支

上面两个^^是什么鬼?上述操作在分支名后总共可以放两个字符,一个是^一个是~,具体规则如下

  • ^ 的用法:在 commit 的后面加一个或多个 ^ 号,可以把 commit 往回偏移,偏移的数量是 ^ 的数量。例如:master^^表示 当前master 指向的 commit 之前倒数第2个 commit
  • ~ 的用法:在 commit 的后面加上 ~ 号和一个数,可以把 commit 往回偏移,偏移的数量是 ~ 号后面的数。例如:master~2 表示的和master^^是一样操作。

2.2说一点点我们就可以在实践上理解一下了

2.2.1 我们依然是从头开始(避免理解乱套),新建一个仓库,新建一个文件test.js,然后提交个4次,如下图
《git高级浅入之当我们需要修改某次commit信息》
2.2.2 ok!准备工作完毕后,我们就来改下倒数第二个提交信息‘[feat]: add b’,将它改为'[fix]: try git rebase -i master^^ ‘。

git rebase -i master^^

2.2.3 输入上面命令,进入如下
《git高级浅入之当我们需要修改某次commit信息》

2.3.4 接下来可以操作的命令都在上图中显示了,我们要做的是编辑,并且要编辑的是第一行(它的排列顺序是一个正序排序,也就是说旧的commit信息在上面,新的commit在下面),我们将pick改为edit,vim操作大概是输入i -> 将pick改为edit -> esc -> :wq
《git高级浅入之当我们需要修改某次commit信息》
2.3.5 然后退出保存后,显示如下
《git高级浅入之当我们需要修改某次commit信息》

git commit --amend

2.3.6 输入如上命令,我们就可以去修改倒数第二个提交信息了

等会!等会!上面命令不是我们上面修改最后一次commit的信息的操作吗?对,没错,那么我们思考下刚刚我们操作是干了什么?其实,我们刚刚使用rebase将最新一次的commit基准定到了倒数第二个。那我们输入完上面命令后看看效果。
《git高级浅入之当我们需要修改某次commit信息》

2.3.7 然后操作和第一个操作一样
《git高级浅入之当我们需要修改某次commit信息》

2.3.8 改完信息后,我们还需要git rebase –continue,将基准从当前倒数第二位置移到最新一次提交

《git高级浅入之当我们需要修改某次commit信息》

2.3.9 git log看下状态
《git高级浅入之当我们需要修改某次commit信息》
看上图,我们会发现我们已经将倒数第二次的提交信息给改了

2.3 接下来通过动图看看,刚刚操作干了什么

git amend -i master^^的时候,它做了这样一件事情
《git高级浅入之当我们需要修改某次commit信息》

然后git commit –amend和git rebase continue的时候,它干了这样一件事情
《git高级浅入之当我们需要修改某次commit信息》

2.4 小结

从宏观上来说分为三步,1.git rebase -i 分支~移动数字 2. 选择对应操作 3.git commit –amend和git rebase continue

点赞