使用git commit --amend
修改最后一次提交
如果仅仅是修改最后一次提交的信息,可以直接输入git commit --amend
,之后会自动打开一个文本编辑器,直接修改这一条信息就可以了。
git rebase -i 使用
修改多个提交信息
Git 中不包含修改历史的工具,可以通过git rebase
来间接地实现更改。
例如我想修改最近三次提交历史,可以输入git rebase -i HEAD~3
,-i
表示以交互模式打开进行git rebase
,之后会自动打开一个文本编辑器,效果如下图所示:
我们可以看到前面三行就是最近三次的提交历史(注意这里的显示是按照提交时间正序显示的,我们使用 git log 命令展示的是按照时间倒着显示的),如果我们要修改第一行,就是修改倒数第三次提交,将第一行的**
pick
修改为edit
**,然后保存。
然后再执行
git commit --amend
,会进入和图 1 类似的文本编辑器中,修改信息后保存并关闭文件。这个时候,我们可以使用git status
命令查看当前工作区中的状态:
。我们很容易发现 rebase 还没有完全结束。在这里,我们还需要运行
git rebase --continue
继续进行 rebase 操作。
下面我们来简单总结一下修改对个提交历史的步骤:
- 使用
git rebase -i HEAD~n
进入 rebase 操作(注意n
表示最近几次提交)。 - 找到需要修改的那一次提交,将前面的
pick
修改为edit
保存并退出。 - 使用
git commit --amend
进入刚刚修改的那次提交,修改提交信息,保存并退出。 - 使用
git rebase --continue
继续执行 rebase 并结束修改。
重新排序提交
可以使用git rebase -i
来实现提交历史的重新排序或者移除历史中的一个提交。
例如如下的提交:
如果我们想把第一次提交和第三次提交交换一下,需要执行的操作如下:
- 执行
git rebase -i HEAD~3
,这里会打开一个编辑器进入编辑模式: - 交换第三次提交和第一次提交的位置,然后保存。
- 保存后会执行
rebase
操作。注意,执行rebase
操作有可能会产生冲突,这个时候需要解决冲突后,再执行git add .
和git rebase --continue
后继续执行rebase
操作。如果没有冲突,这个操作会直接完成。
删除某一次提交
我们还可以使用git rebase
操作来删除某一次提交。例如如下的提交,我想移除图中所示的提交,步骤和重新排序提交的顺序是一样的:
- 执行
git rebase -i HEAD~3
。 - 在打开的编辑器中,删除指定的那一行,然后保存并退出。
- 最后保存后会执行
rebase
操作,同样需要注意冲突的解决。
压缩提交
通过git rebase -i
操作,我们还何以将一连串的提交压缩成为一个单独的提交,同样是如下图所示的提交:
如果我想把最近的三次提交压缩成一次操作,应该怎么操作呢?毫无疑问还是使用
git rebase -i
操作。
- 执行
git rebase -i HEAD~3
, 在打开的编辑器中(如下图所示), - 将对应的**
pick
修改为squash
**,保存并退出。 - 退出编辑后,会弹出如下的一个新的编辑器,这里需要我们修改
commit message
,修改之后保存并退出。