0


【Git】如何使用sourcetree进行rebase操作(变基)

文章目录

注:接下来的演示操作仍将以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

//添加所有并提交
gitadd.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

就行,恢复的干干净净,不会影响你的代码。

标签: git rebase 变基

本文转载自: https://blog.csdn.net/catshitone/article/details/129673425
版权归原作者 JimCarter 所有, 如有侵权,请联系我们删除。

“【Git】如何使用sourcetree进行rebase操作(变基)”的评论:

还没有评论