使用git commit --amend修改最后一次提交

如果仅仅是修改最后一次提交的信息,可以直接输入git commit --amend,之后会自动打开一个文本编辑器,直接修改这一条信息就可以了。 图1修改提交信息|center

git rebase -i使用

修改多个提交信息

Git中不包含修改历史的工具,可以通过git rebase来间接地实现更改。 例如我想修改最近三次提交历史,可以输入git rebase -i HEAD~3-i表示以交互模式打开进行git rebase,之后会自动打开一个文本编辑器,效果如下图所示: @图2 输入git rebase -i HEAD~3 我们可以看到前面三行就是最近三次的提交历史(注意这里的显示是按照提交时间正序显示的,我们使用git log命令展示的是按照时间倒着显示的),如果我们要修改第一行,就是修改倒数第三次提交,将第一行的**pick修改为edit**,然后保存。 @图3 将第一行的pick修改为edit 然后再执行git commit --amend,会进入和图1类似的文本编辑器中,修改信息后保存并关闭文件。这个时候,我们可以使用git status命令查看当前工作区中的状态: @图4 可以使用git status 命令查看工作区状态 。我们很容易发现rebase还没有完全结束。在这里,我们还需要运行git rebase --continue继续进行rebase操作。 下面我们来简单总结一下修改对个提交历史的步骤:

  1. 使用git rebase -i HEAD~n进入rebase操作(注意n表示最近几次提交)。
  2. 找到需要修改的那一次提交,将前面的pick修改为edit保存并退出。
  3. 使用git commit --amend进入刚刚修改的那次提交,修改提交信息,保存并退出。
  4. 使用git rebase --continue继续执行rebase并结束修改。

重新排序提交

可以使用git rebase -i 来实现提交历史的重新排序或者移除历史中的一个提交。 例如如下的提交: Alt text 如果我们想把第一次提交和第三次提交交换一下,需要执行的操作如下:

  1. 执行git rebase -i HEAD~3,这里会打开一个编辑器进入编辑模式: Alt text
  2. 交换第三次提交和第一次提交的位置,然后保存。 Alt text
  3. 保存后会执行rebase操作。注意,执行rebase操作有可能会产生冲突,这个时候需要解决冲突后,再执行git add .git rebase --continue后继续执行rebase操作。如果没有冲突,这个操作会直接完成。

删除某一次提交

我们还可以使用git rebase 操作来删除某一次提交。例如如下的提交,我想移除图中所示的提交,步骤和重新排序提交的顺序是一样的: Alt text

  1. 执行git rebase -i HEAD~3
  2. 在打开的编辑器中,删除指定的那一行,然后保存并退出。
  3. 最后保存后会执行rebase操作,同样需要注意冲突的解决。

压缩提交

通过git rebase -i操作,我们还何以将一连串的提交压缩成为一个单独的提交,同样是如下图所示的提交: Alt text 如果我想把最近的三次提交压缩成一次操作,应该怎么操作呢?毫无疑问还是使用git rebase -i操作。

  1. 执行git rebase -i HEAD~3, 在打开的编辑器中(如下图所示), Alt text
  2. 将对应的**pick修改为squash**,保存并退出。 Alt text
  3. 退出编辑后,会弹出如下的一个新的编辑器,这里需要我们修改commit message,修改之后保存并退出。 Alt text