代码编织梦想

文章目录


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

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

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

操作步骤

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

  1. 首先需要确保master和test分支的代码都是最新的代码(没事git pull一下),而且当前分支是test分支

  2. 然后,我们在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分支上的内容

  3. 解决完冲突之后,不要进行commit,保持你是如下这样的页面:
    在这里插入图片描述

  4. 然后打开git命令行工具,可以看到提示说:所有冲突都解决了,请使用git rebase --continue命令。
    在这里插入图片描述
    那我们就输入这个命令即可,如何提示还是有冲突那就继续解决。当所有的冲突都解决完了,git会告诉我们rebase已经成功了,如下图:
    在这里插入图片描述
    此时我们就可以看到现在的test已经rebase到了master上(只是本地rebase好了,还并没有推送到远端哦):
    在这里插入图片描述

  5. 但是这里又需要我们特别注意:git告诉我们本地的test分支与远端的test分支不一致,需要我们先把那5个提交pull下来,这里一定不要pull,否则就会额外多了一个merge操作。 ( 不过如果你的test分支远端不存在的话(都是自己本地提交的),则不会有这个问题,在这里直接git push上去就行。)
    所以在这里使用git push --force直接强推上去。
    在这里插入图片描述

  6. rebase完成。

Q&A

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

A: 非也。首先从master merge到test上(确保后续的rebase冲突可以很好解决),然后基于当前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就行,恢复的干干净净,不会影响你的代码。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/catshitone/article/details/129673425

mac sourcetree 执行git rebase 操作_ever_gs的博客-爱代码爱编程

    当子分支的根节点更新之后,需要rebase子分支根节点才能进行push操作,在此记录下在mac sourcetree中执行rebase操作。     首先,两个分支一个dev分支,一个feature分支。      当进行rebase操作时,将分支切在feature上,然后选中dev分支右击选择rebase current changes onto

对git的rebase(变基)的理解-爱代码爱编程

其实git的官网对变基的解析挺详细的了:地址 从原理上也能理解【变基】和【合并】有啥区别。 我的理解是,【变基】和【合并】都能解决一个问题,那就是合并代码。但是他们的区别是:在master的记录上会有所不同。如下图:(我

[sourcetree] rebase的使用-爱代码爱编程

相关问题 最近写自己的辣鸡代码使用git时,因为个人不大熟悉git又是个强迫症,被来回不同的版本折腾来折腾去的,十分不爽,于是在此小结下sourcetree怎么使用变基。 变基rebase这个操作说白了就是,重新选定当前提交的根节点。 而根据使用分支不同,也产生了不同类型的变基操作的需求。 解决方案 在不同分支之间使用变基 现在有mas

git rebase-爱代码爱编程

理解 rebase也是整合不同分支的方法,和merge不同的是它会改变提交历史。git help rebase命令查看具体描述。 假设当前HEAD指向topic分支,下面执行rebase命令(将topic上的patch打到master上,并改变历史),使用git rebase master rebase前:

Git可视化工具SourceTree的使用-爱代码爱编程

 我在前面几篇文章中详细介绍了Git命令行的使用《Git学习札记》《Git学习札记——进阶》,以及使用Xcode中自带的Git可视化工具的使用《Xcode中git的使用方法介绍与"Please tell me who you are"问题的解决方案》。对于Git的初学者,个人建议先学习Git命令行,然后再去使用图形化工具,这样才会对整个Git的工作流有一个

sourceTree中的rebase操作-爱代码爱编程

文章目录 前言一、场景1、2、3的准备工作1.初始化master,检出feature2.feature分支提交2-33.master提交4-5二、feature rebase master1.feature rebase 最新的master总结 前言 场景: master分支:1从master分支1检出feature分支:1-2-3mast

git rebase之后的拉取与推送-爱代码爱编程

1、现象 分支: aaa develop develop分支:最新状态 aaa分支:有远程分支和本地分支,并且两个分支都处于最新状态(一模一样),aaa分支拉取自develop分支,在a commit处拉取,并且在aaa分支创建之后,develop分支有了新的提交,也就是在a commit之后, develop分支有c commit, d commit,

Git客户端Sourcetree工具安装使用详解-爱代码爱编程

目录 一、Git工作流程 二、Git安装 二、Sourcetree工具安装 四、Sourcetree配置 五、Sourcetree配置SSH 一、Git工作流程   二、Git安装 1、获取安装程序 a、官网地址:https://git-scm.com/downloads b、网盘地址:百度网盘 请输入提取码 xc5d 2、双击

在 sourcetree 中使用 rebase (变基)_青颜的天空的博客-爱代码爱编程

原始状态 假如我们要在 master 分支上进行开发,在远端的 master 分支上右键,检出 一个自己的开发分支 dev-1 做一些开发,提交到本地,不要推送(push)到远端 切换到 master 分支,拉取远端

go merge --ff --no-ff --ff-only三种模式的区别-爱代码爱编程

前言 git merge 应该是开发者最常用的 git 指令之一, 默认情况下你直接使用 git merge 命令,没有附加任何选项命令的话,那么应该是交给 git 来判断使用哪种 merge 模式,实际上 git 默认执行的指令是 git merge -ff 指令(默认值) 对于专业的开发者来说,你可能无须每次合并都指定合并模式(如果需要的话还是要指

git rebase -爱代码爱编程

交互式变基这个词是sourceTree的翻译。 交互式变基可以将多个提交合并为一个,当然他的功能不止于此。但一般用于以下情况: 在某个分支(比如dev)下做功能开发,当测试完毕,将要合并dev到master,但由于开发过程中有太多的提交,合并到master之后会让master的整个提交记录看起来不优雅,所以这时候可以用交互式变基去合并,这样做有两个好处

【git】git基础总结与sourcetree的使用和配置_sourcetree和git-爱代码爱编程

目录 1 终端使用git1.1 安装git1.1.1 配置git bash1.1.2 终端命令1.1.3 git命令关键字1.1.4 git名词介绍 1.2 暂存区1.2.1 #init 创建本地版本库