写点什么

git rebase 介绍与可视化工具(sourceTree)提效

  • 2023-08-01
    浙江
  • 本文字数:1713 字

    阅读完需:约 6 分钟

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、分支合并:

命令行:

git rebase [<branch>]
复制代码

一般我们代码开发过程中都会合并下 master 分支代码,使用 git rebase master 即可

2、交互式合并提交记录

命令行:

git rebase [--interactive | -i] HEAD~[n]   
复制代码
  • --interactive,简写-i,代表交互

  • HEAD~[n],代表从合并最近的 n 次提交纪录


此命令执行后,Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。在实际使用时,所谓的 UI 窗口一般会在文本编辑器——如 Vim 中打开一个文件。


通过如下举例提交内容,说明如何将 commit_5 到 commit_1 合并成 1 个提交,进行示意:

1、命令执行

执行

git rebase -i HEAD~5
复制代码

此命令等效于 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 记录,灵活度大)

pick f73a559 commit_1s 1d36781 commit_2s a337fe0 commit_3s 98c5551 commit_4s 85be143 commit_5
复制代码

3、保存执行

保存后,自动执行,出现执行结果交互界面:


这里会把 5 个历史提交的的内容都合并在一起,这里可以重新编辑,简洁提交内容,如简洁为:

4、再次保存执行,变基完成

可以看到 5 个合并变成了 1 个合并,并且内容为我们自己自定义的:

5、冲突处理

出现冲突时,git rebase 会停止:

1、此时需要解决冲突:当我们冲突处理好后,执行

git add <filename>
复制代码


可以把冲突文件标记为已解决,冲突文件都解决完毕后执行:

git rebase --continue
复制代码

继续变基执行,完成变基


2、或者不解决冲突,直接放弃变基:

git rebase --abort
复制代码

6、提交生效

若变基的是已在远程仓库的提交记录,本地变基完后,需要执行强制推送,进行远程仓库生效:

git push origin [<local_branch>]:[remote_branch] -f
复制代码


如本地、远程的分支名都为 bugfix,则命令为

git push origin bugfix:bugfix -f
复制代码

三、可视化工具(sourceTree)提效

工欲善其事,必先利其器。

由于命令行的操作有记忆成本、理解成本,这里可以使用可视化工具 sourceTree:Sourcetree | Free Git GUI for Mac and Windows

进行变基提效:

1、分支合并:

sourceTree 拉取时,勾选“用变基代替合并”即可

2、交互式合并提交记录:

1、在需要合并的提交前一个提交,右键点击交互式变基

2、点击 squash

这里也可以移动提交顺序、删除、及编辑提交内容


3、编辑最终的提交内容

4、变基完成

其中蓝色分支为变基后的当前分支,提交记录可以看到合并成 1 个了

并且 git log 下也只有 1 条:

可以看出,用工具的变基操作会更加有效率。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2023-07-24 加入

还未添加个人简介

评论

发布
暂无评论
git rebase介绍与可视化工具(sourceTree)提效_git_时常看看太阳_InfoQ写作社区