Git Rebase

    科技2025-07-18  10

    用来管理commit的提交记录,包括增删改查,进而维护commit log的干净,无污染

    第一部分:概念

    基点

    每个commit都以前一个commit作为基点进行开发,当我们提交一个commit,准备push到远端master时,git会进行检查:远端master的最新节点与当前分支的基点是否一致(即他们的head序号是否一致),若相同,则允许push,否则,禁止push。

    第二部分:使用

    1. 变基,继承目标分支的改动

    通过变更 当前分支 的commit基点,使其继承 目标分支 的更改,并避免了merge带来的merge log, 保证了 当前分支 log的干净整洁。

    命令

    git rebase [new branch]

    当前分支的commit基点变更为new branch的最新基点。 注意:

    rebase前,需要通过git fetch把目标分支获取最新通过git rebase origin/[branch name] 直接变基到远端的分支上

    工作原理

    第一步:git寻找 当前分支 与 目标分支 最近的共同head作为变基的基点;

    第二步:从变基基点开始,git 会把 当前分支 后续提交的每个 commit 取消掉(包括已push的commit);

    第三步:把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;

    第四步:把 当前分支 变基基点之前部分更新到最新的 目标分支;

    第五步:把上面保存的 patch 文件应用到 当前分支 上(即将patch追加到目标分支的后面);

    工作效果

    说明:feature1是从 B 节点切出来的分支 ,freature2是从 C 节点切出来的分支。

    落后分支rebase 优先分支[ feature1 rebase feature2 ]

    合并过程中,B基点与C基点存在冲突,需要解决

    优先分支rebase落后分支[ feature2 rebase feature1 ]

    2.维护本地与线上的commit的提交记录(删、改)

    命令

    git rebase -i head~[n]

    获取最近n条commit log,并进行维护,

    工作原理

    维护本地的commit记录(合并,删除、修改等),然后通过git push -f使线上与本地保持一致,从而来对线上的commit log进行维护,包括 删除 和 修改。

    工作界面

    注意:

    如图log的排序是正序的,即最新的commit放在最下面使用时squash与fixup时,其上面必须有一条pick的commit,因为squash 与 fixup 的操作是将本条commit 往上一条commit上合并的。修改后,如果之前的commit已push,则此时需要使用git push -f 进行强推i命令开始进行编辑,esc+:q退出,esc+:wq保存并退出

    第三部分:相关命令

    查看是否在rebase过程中

    git branch

    如图,则表示正在rebase的过程中

    终止rebase过程

    git rebase --abort

    继续rebase过程

    git rebase --continue

    在解决rebase的冲突后,使用git add . 暂存,然后使用git rebase --continue继续rebase过程

    进入rebase -i 的编辑页

    git rebase --edit-todo

    当rebase -i的操作产生错误时,会退出编辑页,此时需要执行此命令进入编辑页,并修改操作。

    rebase成功后撤销

    step1:查看所有操作记录

    git reflog

    如图,圈中的部分即为rebase前的操作步骤编号,获取其序列号。

    step2:撤销到rebase操作前

    git reset [head]
    Processed: 0.009, SQL: 8