用来管理commit的提交记录,包括增删改查,进而维护commit log的干净,无污染
每个commit都以前一个commit作为基点进行开发,当我们提交一个commit,准备push到远端master时,git会进行检查:远端master的最新节点与当前分支的基点是否一致(即他们的head序号是否一致),若相同,则允许push,否则,禁止push。
通过变更 当前分支 的commit基点,使其继承 目标分支 的更改,并避免了merge带来的merge log, 保证了 当前分支 log的干净整洁。
当前分支的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 ]
获取最近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的过程中
在解决rebase的冲突后,使用git add . 暂存,然后使用git rebase --continue继续rebase过程
当rebase -i的操作产生错误时,会退出编辑页,此时需要执行此命令进入编辑页,并修改操作。
step1:查看所有操作记录
git reflog如图,圈中的部分即为rebase前的操作步骤编号,获取其序列号。
step2:撤销到rebase操作前
git reset [head]