跳到主要内容

rebase

2024年04月27日
柏拉文
越努力,越幸运

一、git rebase


说明: git rebase 的最大作用是它可以重写历史。我们通常会通过 git rebase -i 使用 git rebase 命令,-i 参数表示交互(interactive),该命令会进入到一个交互界面中,其实就是 Vim 编辑器。在该界面中,我们可以对里面的 commit 做一些操作,交互界面如图所示:

Preview

这个交互界面会首先列出给定之前(不包括,越下面越新)的所有 commit,每个 commit 前面有一个操作命令,默认是 pick。我们可以选择不同的 commit,并修改 commit 前面的命令,来对该 commit 执行不同的变更操作。git rebase 支持的变更操作如下:

  • pick,p: 使用这个提交,即保留这个提交在新的历史记录中。

  • reword,r: 使用这个提交,但会提示你修改提交信息。

  • edit,e: 使用这个提交,但会暂停并进入编辑模式,让你可以通过 git commit --amend 修改提交内容或提交信息。

  • squash,s: 将这个提交与前一个提交合并,并允许你编辑合并后的提交信息。

  • fixup,f: 将这个提交与前一个提交合并,但会丢弃这个提交的信息,直接使用前一个提交的信息。

  • exec,x: 在暂停的时候执行一个指定的 shell 命令。

  • drop,d: 丢弃这个提交,即从历史中删除这个提交。

在上面的 7 个命令中,squashfixup 可以用来合并 commit。例如用 squash 来合并,我们只需要把要合并的 commit 前面的动词,改成 squash(或者 s)即可。

二、git rebase --skip


三、git rebase --abort


四、git rebase --continue


四、git rebase -i [commit-hash]


五、git rebase -i [startpoint] [endpoint]