【Git】sourcetree如何使用rebase操作(变基)
创始人
2025-05-31 08:02:52
0

注:接下来的演示操作仍将以SourceTree这个可视化工具为例。

个人感觉rebase这个功能有点多余,其实merge操作已经覆盖了它的功能。可能就是为了让整个commit看起来更顺畅一下,没有那么多的旁路分支,不那么杂乱。虽然个人不是很喜欢这个功能,但是很多开源库的作者再你提pr的时候都会要求你rebase到它最新的master分支上,这样作者评审代码的时候可能会更方便。

所以在这里给大家介绍下如何将某个分支rebase到另外一个分支上。

操作步骤

假如有如下的分支结构,我们希望将test分支rebase到master分支上。
在这里插入图片描述

首先需要确保master和test分支的代码都是最新的代码(没事git pull一下),而且当前分支是test分支
然后,我们在master的M-A 这次最新的提交上,右键点击【Rebase children of xxx interfactively】,如下图:
在这里插入图片描述
在这里我们可以选择是否需要将4次commit合并为1次commit,如果需要则点击【Squash with previous】即可,具体操作可见这篇文章的第11小节。在这里我们不合并就直接点击OK,如下图:
在这里插入图片描述
点击之后一般都会有冲突,如下:
在这里插入图片描述
不用担心,点击Close关闭弹框即可,然后使用source tree解决冲突。在这里有一点需要特别注意
在这里插入图片描述
rebase解决冲突时,与我们常规的merge解决冲突的Theris和Mine是反的。即这里的Theirs代码的是test分支上的内容,Mine代表的是master分支上的内容

解决完冲突之后,不要进行commit,保持你是如下这样的页面:
在这里插入图片描述
然后打开git命令行工具,可以看到提示说:所有冲突都解决了,请使用git rebase --continue命令。
在这里插入图片描述
那我们就输入这个命令即可,如何还是有冲突继续解决冲突。当没有冲突时,会告诉我们rebase已经成功了,如下图:
在这里插入图片描述
此时我们就可以看到现在的test已经rebase到了master上(只是本地rebase好了,还并没有推送到远端哦):
在这里插入图片描述
但是这里又需要我们特别注意:git告诉我们本地的test分支与远端的test分支不一致,需要我们先把那5个提交pull下来,这里一定不要pull,否则就会额外多了一个merge操作。 ( 不过如果你的test分支远端不存在的话(都是自己本地提交的),则不会有这个问题,在这里直接git push上去就行。)

所以在这里使用git push --force直接强推上去。
在这里插入图片描述
rebase完成。

Q&A

Q1: 如果我之前已经习惯了使用merge,我自己的test分支上有很多提交都是从其它分支上merge过来的,而且已经解决了不少的提交。现在要rebase到master上肯定这些冲突还会再次出现,只能一个个手动解决吗?

A: 非也,可以基于当前test创建一个临时分支,将这个临时分支rebase上去。创建临时分支的操作如这里的3.1小节所介绍。这里简单解释下操作(首先保证当前分支为test分支):

//创建临时分支
git checkout --orphan tmp//添加所有并提交
git add .
git commit -m "创建临时分支并本地提交"

将tmp分支rebase到master即可,你会发现冲突很好解决,基本使用【Resolve using “Theirs”】就可以。

Q2: SourceTree这里的rebase是什么意思?与下面的rebase有什么区别?
在这里插入图片描述
A2: 本质行一样,没什么区别。下面的哪一个功能更丰富一点,可以让我们选择是否要【Edit Message】和【Squash commits】。

Q3: rebase过程中,后悔了咋弄?不想rebase了。
A3: 执行git rebase --abort就行,恢复的干干净净,不会影响你的代码。

相关内容

热门资讯

mysql-windows安装... 下载 https://mirrors.tools.huawei.com/mysql/Download...
《内蒙古自治区保障农民工工资支... 原标题:《内蒙古自治区保障农民工工资支付条例》7月1日起实施 内蒙古日报5月30日讯(记者 王皓)5...
windows server2... windows server2003 多用户登陆问题解决办法 Windows Server远程登陆默...
多线程之单例模式 目录 1.什么是单例模式  2.单例模式的类型 3.饿汉模式 4.饿汉模式 5.多线程 1.什么...
一次内存泄露排查 前因: 因为测试 长时间压测导致 接口反应越来越慢,甚至 导致服务器 崩...
5.网络爬虫——Xpath解析 网络爬虫——Xpath解析Xpath简介Xpath解析节点选择路径表达式谓语未知节点Xpath实战演...
关于类和对象的分文件编写---... 1.简介 本文通过一个判断点和圆位置关系的实例,来记录C++中类和对象...
操作系统之磁盘相关 目录 磁盘的结构 具体结构 基本概念 磁盘、磁道、扇区 盘面、柱面 如何在磁盘中读写数据 磁盘的物理...
SLF4J、Log4J、Log... SLF4J ,全称Simple Logging Facade for Java...