先说一下 rebase,rebase 是”变基”的意思,这里的”基”,在我理解是指[多次] commit 形成的 git workflow,使用 rebase,我们可以改变这些历史提交,修改 commit 信息,将多个 commit 进行组合。
介绍 rebase 的文档有很多,我们直接来说用它来进行代码回退的步骤。
- 首先,切出一个新分支 F,使用 git log 查询一下
要回退到
的 commit 版本 N。 - 使用命令
git rebase -i N
, -i 指定交互模式后,会打开 git rebase 编辑界面,形如:
pick 6fa5869 commit1
pick 0b84ee7 commit2
pick 986c6c8 commit3
pick 91a0dcc commit4
- 这些 commit 自旧到新由上而下排列,我们只需要在 commit_id 前添加操作命令即可,在合并 commit 这个需求里,我们可以选择
pick(p)
最旧的 commit1,然后在后续的 commit_id 前添加squash(s)
命令,将这些 commits 都合并到最旧的 commit1 上。 - 保存 rebase 结果后,再编辑 commit 信息,使这次 rebase 失效,git 会将之前的这些 commit 都删除,并将其更改合并为一个新的 commit5,如果出错了,也可以使用
git rebase --abort/--continue/--edit-todo
对之前的编辑进行撤销、继续编辑。