git rebase 介绍与可视化工具(sourceTree)提效
git rebase 在官方文档中解释为:“Reapply commits on top of another base tip”,中文意思为“在另一个基本提示之上重新提交”,简言之变基。
本文先介绍 git rebase 能做什么,然后如何操做,最后可以使用 sourceTree 工具提效这些操作。
一、git rebase(变基)能做什么
优点一:合并分支线性化
在 git 中,如何将两个分支合并到一起,除了 git merge 命令,git rebase 命令也能够做到分支合并。而 rebase 相比于 merge,可以创造更线性的提交历史:
如分支 bugfix、main 为两个并行开发的分支:C2、C3 为 bugfix 的 commit 节点,C4 为 main 的 commit 节点,bugfix 为当前分支:
merge 与 rebase 分支合并的效果对比:
优点二:提交记录明确化
除了分支合并,git rebase 也可以把提交记录明确化,将提交进行合并、剔除、修改提交记录内容等操作,代码库的提交历史将会变得明确易懂。比如现在这么多相同提交信息的提交:
先不说这些 commit 的提交规范,就凭这些很多的重复描述提交,一是不利于团队内的代码 review,二是不利于代码回滚:紧急修复情况下,能一眼就知道应该回滚到哪个提交上吗
而 git rebase 可以把这些重复的合并变成一个,将提交记录清晰化,方便自己与他人
二、git rebase 如何操做
这里介绍使用命令行形式,如何来 git rebase
1、分支合并:
命令行:
一般我们代码开发过程中都会合并下 master 分支代码,使用 git rebase master 即可
2、交互式合并提交记录
命令行:
--interactive,简写-i,代表交互
HEAD~[n],代表从合并最近的 n 次提交纪录
此命令执行后,Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。在实际使用时,所谓的 UI 窗口一般会在文本编辑器——如 Vim 中打开一个文件。
通过如下举例提交内容,说明如何将 commit_5 到 commit_1 合并成 1 个提交,进行示意:
1、命令执行
执行
此命令等效于 git rebase -i bc1d884 85be143 ,其中 bc1d884 为 commit_1 的前一个提交(即 init 提交内容节点),85be143 为 commit_5
命令提交后,出现 vim 编辑界面:
介绍下常用命令:
p, pick = 保留本次提交记录,不做改变
r, reword = 保留代码变更范围,提交说明使用新编辑的内容
s, squash = 保留代码变更范围,合并到前一个提交中
f, fixup = 保留代码变更范围,丢弃提交说明
d, drop = 丢弃本次提交
2、vim 编辑
将 vim 编辑结果如下,可以将 5 个提交合并成 1 个,(其中这里也可以调整 commit 顺序或选取部分 commit 记录,灵活度大)
3、保存执行
保存后,自动执行,出现执行结果交互界面:
这里会把 5 个历史提交的的内容都合并在一起,这里可以重新编辑,简洁提交内容,如简洁为:
4、再次保存执行,变基完成
可以看到 5 个合并变成了 1 个合并,并且内容为我们自己自定义的:
5、冲突处理
出现冲突时,git rebase 会停止:
1、此时需要解决冲突:当我们冲突处理好后,执行
可以把冲突文件标记为已解决,冲突文件都解决完毕后执行:
继续变基执行,完成变基
2、或者不解决冲突,直接放弃变基:
6、提交生效
若变基的是已在远程仓库的提交记录,本地变基完后,需要执行强制推送,进行远程仓库生效:
如本地、远程的分支名都为 bugfix,则命令为
三、可视化工具(sourceTree)提效
工欲善其事,必先利其器。
由于命令行的操作有记忆成本、理解成本,这里可以使用可视化工具 sourceTree:Sourcetree | Free Git GUI for Mac and Windows
进行变基提效:
1、分支合并:
sourceTree 拉取时,勾选“用变基代替合并”即可
2、交互式合并提交记录:
1、在需要合并的提交前一个提交,右键点击交互式变基
2、点击 squash
这里也可以移动提交顺序、删除、及编辑提交内容
3、编辑最终的提交内容
4、变基完成
其中蓝色分支为变基后的当前分支,提交记录可以看到合并成 1 个了
并且 git log 下也只有 1 条:
可以看出,用工具的变基操作会更加有效率。
版权声明: 本文为 InfoQ 作者【时常看看太阳】的原创文章。
原文链接:【http://xie.infoq.cn/article/e99efebbc9e44d65ebb73a77d】。文章转载请联系作者。
评论