[sourcetree] rebase的使用

相关问题

最近写自己的辣鸡代码使用git时,因为个人不大熟悉git又是个强迫症,被来回不同的版本折腾来折腾去的,十分不爽,于是在此小结下sourcetree怎么使用变基。

变基rebase这个操作说白了就是,重新选定当前提交的根节点
而根据使用分支不同,也产生了不同类型的变基操作的需求。

解决方案

在不同分支之间使用变基

现在有master和dev两个分支:
分支结构
想要把dev分支变基到master上,形成一条干净整洁的直线。

切换到自己的dev分支:
在这里插入图片描述
右键点击master分支,选择交互式变基:
在这里插入图片描述
此处可以编辑变基后的各个提交的信息,以及是否把每个提交都变基,然后点击确定:
在这里插入图片描述
如果变基出现冲突(同个文件同一行前后版本不同),会报错(sourcetree感觉还是不够智能),需要自己手动解决,请不要点击右下角的关闭:(当然没有冲突就万事大吉也不需要以下操作)
在这里插入图片描述
按照指示先自己合并,先打开自己的文件,显示的是master尝试加入第一个dev提交产生的冲突信息:
在这里插入图片描述
删去多余的信息,留下“add dev 1”这次提交的有用代码,并保存就可以了:
在这里插入图片描述
然后打开sourcetree右上方的命令行模式,输入命令添加该文件:

git add me.txt
git rebase --continue

接下来会要求你填写“add dev 1”提交变基时的注释信息,根据自己需要更改或者不改,这里使用的是vim编辑器,输入i进入编辑模式,修改完成输入Esc返回,然后输入:wq保存即可:
在这里插入图片描述
修改成功后,这里同时提示接下来还要进行“add dev 2”的手动变基合并:
在这里插入图片描述
接下来进行“add dev 2”的变基合并,同理略。。。
最后输出这个信息说明成功了:
在这里插入图片描述
这时可以在sourcetree界面把报错界面关闭掉,你会发现已经变成一条直线:
在这里插入图片描述

在分支内部使用变基

当前分支树如图,当前所在分支为dev
在这里插入图片描述
想要把最近的一次提交”add dev 2…“的根节点之间变为”add 1“,简单的说就是删掉/合并(本文是删除)”add dev 1“和”master 2“。

首先,确认当前为dev分支,然后右键点击”add 1“,选择交互式变基:
在这里插入图片描述
右键选择删除中间两个节点(否则变基之后没有任何变化,因为本就属于一个分支),点击确认:
在这里插入图片描述
然后又出现了熟悉的画面,存在冲突时需要手动解决,注意不要关闭该窗口(否则操作会取消):
在这里插入图片描述
打开冲突的文件,手动解决冲突后,打开sourcetree报错界面的右上角命令行模式:
在这里插入图片描述
添加冲突解决后的文件,继续rebase,输入命令:
在这里插入图片描述
本文第一部分已提到,此处可修改commit信息,保存退出:
在这里插入图片描述
命令行提示successful即可,回到sourcetree关闭报错窗口结束,现在dev分支结构如图:
在这里插入图片描述

PS

sourcetree的交互式变基实质就是代替执行命令行的git reabse -i,还可以实现很多其他的功能,比如历史记录的删除、排序、修改、拆分、合并等等,利用sourcetree的gui都可以实现,但是出现文件冲突时还需要手动进行命令行的调整(要是能完全脱离命令行就好了)。

个人使用sourcetree体会

  1. 很多时候使用sourcetree,莫名其妙的总是各种错误,如果不需要本地的未提交修改,可以直接用sourcetree的丢弃命令,并且点重置所有,即可以从合并状态中退出。但如果要退出rebase状态,还是需要进入命令行输入git rebase --abort来终止
  2. 很多时候一不小心rebase或者reset,又或者执行某个命令又想撤销,任何历史信息都可以在命令行输入git reflog查询,并用git reset <id> 即可恢复之前的版本
  3. 任何突发的任务来临,首先用git stash封存当前状态,然后就可以丢弃本地修改去干临时的任务
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Sourcetree是一个用于管理Git仓库的可视化工具。在Sourcetree中,rebase(变基)和merge(合并)是两种不同的操作,它们的区别如下: 1. rebase(变基)操作是将一个分支的修改应用到另一个分支上,使两个分支的提交历史线性地排列在一起。在rebase过程中,会将要变基的分支的修改以补丁的方式应用到目标分支上,然后将目标分支指向最新的补丁提交。这样可以使提交历史更加清晰,更容易理解。 2. merge(合并)操作是将两个分支的修改合并到一起,形成一个新的提交。在merge过程中,会创建一个新的合并提交,包含了两个分支的修改。这样可以快速合并分支,并保留每个分支的独立提交历史。 rebase和merge的使用场景不同: - 当需要在当前分支上应用其他分支的修改时,可以使用rebase操作。例如,当你在本地开发一个feature分支,同时有其他人在远程develop分支上提交了修改,你希望将这些修改应用到自己的分支上,可以使用rebase操作。 - 当需要合并两个独立的分支时,可以使用merge操作。例如,当你在本地开发一个feature分支,完成后需要将该分支合并到主分支上,可以使用merge操作。 总之,rebase和merge是Sourcetree中两种不同的操作,它们分别适用于不同的场景,能够帮助我们更好地管理和协作开发Git仓库。 ### 回答2: Sourcetree是一款Git图形化界面工具,其中有两个常用操作是rebase和merge,它们都是用于处理分支合并的方法。rebase和merge的区别如下: 1. merge(合并):将一个分支的更改合并到另一个分支上。当我们使用merge时,会在目标分支上创建一个新的合并提交,该提交将包含来自源分支的所有更改。这意味着,会在提交历史中看到一个新的合并节点。 2. rebase(变基):将一个分支的更改放在另一个分支的基础上。当我们使用rebase时,会将源分支上的提交逐个应用到目标分支的末端。这样,提交历史会更线性,没有创建新的合并节点。 总结来说,rebase和merge的主要区别在于提交历史的处理方式。merge会创建新的合并提交,保持原有的提交历史记录,而rebase会将提交逐个应用到目标分支上,使提交历史更加线性。因此,在选择使用rebase还是merge时需要考虑清楚自己的需求,以及对提交历史记录的要求。 ### 回答3: SourceTree是一款广泛使用Git图形化界面工具,在进行版本控制时,它提供了两种主要的操作方式,即rebase和merge。 首先,rebase是一种将一系列提交节点(commits)应用到目标分支的操作。它可以将多个提交节点合并成一个更整洁的提交线,使得分支历史看起来更加线性和简洁。在rebase过程中,被合并的提交节点会根据其在当前分支上的位置被依次应用到目标分支上,形成一个新的提交线。Rebase适合于保持代码历史纯净,以及处理功能分支中的冲突。 另一方面,merge是将两个或多个分支的更改集合合并为一个新的提交的操作。当执行merge时,Git会自动创建一个新的提交节点,将两个分支上的更改集合整合在一起。与rebase不同,merge会保留每个分支的历史记录和每个提交节点。Merge适合处理不同分支之间的代码改动,可以方便地在分支之间进行代码合并。 总的来说,rebase和merge有如下区别: 1. Rebase可以使得分支历史更加线性和整洁,而merge则会保留每个提交节点的历史记录。 2. Rebase适合处理功能分支中的冲突,而merge适合处理不同分支之间的代码改动。 3. Rebase会改变分支上的提交顺序和SHA值,而merge不会。 4. Rebase具有潜在的风险,因为它改变了提交历史,可能会导致合并冲突。 在使用SourceTree时,根据项目需求和开发流程,可以选择合适的操作方式,即rebase或merge,来管理和处理代码的合并。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值