当前位置: 首页 > news >正文

SourceTree rebase(变基)的使用

参考资料

  1. 【Sourcetree】コミットを一つにまとめる
  2. 【Sourcetree】リベースする

目录

  • 前提
    • 0.1 merge与rebase
    • 0.2 merge合并分支
    • 0.3 rebase合并分支
    • 0.4 💥超级注意事项💥
  • 一. 代码已提交,未推送,交互式变基
    • 1.1 通过SourceTree操作
    • 1.2 通过Git命令行操作
      • 1.2.1 进入命令行终端,指定交互变基版本
      • 1.2.2 指定需要处理的提交
      • 1.2.3 指定提交信息
      • 1.2.4 查看修改效果
  • 二. 代码已提交,已推送,交互式变基
    • 2.1 通过命令行进行交互式变基,合并提交
    • 2.2 将合并的提交推送到远端
      • 2.2.1 遇到的问题
      • 2.2.2 通过命令行强制推送


前提

0.1 merge与rebase

⏹merge

  • 如果你希望保留分支的历史记录,并且不介意有合并提交。适用于团队合作时保留每个人的工作记录。

⏹rebase

  • 如果你希望保持提交历史的简洁和线性,适用于希望干净历史的项目。

🤔一般而言,如果你在自己的本地分支上进行开发,并且想要保持分支历史记录的干净和整洁,就可以使用git rebase。
而对于多人协作的项目来说,由于需要共享代码库,因此最好使用git merge来避免破坏其他人的历史记录。

0.2 merge合并分支

⏹下图是 merge 合并分支时前后版本变化的情况

  • merge 会创建一个新的合并提交,将两个分支的历史记录保留在一起。
  • 日志保存完整,不管你之前合并进来的那个版本有多少个提交历史,都会被完整的合并到目标分支。
  • 过多的提交合并到主分支之后,主分支的Graph会很乱。

在这里插入图片描述

0.3 rebase合并分支

⏹下图是 rebase 合并分支时前后版本变化的情况

  • rebase 会将分支上的更改重新应用在目标分支上,重写提交历史。
  • rebase 方式提交的版本历史是线性的,不会创建新的合并提交,历史记录非常干净。

在这里插入图片描述

⏹合并压缩

  • 在rebase 的时候还可以使用 squash 参数来压缩提交记录。
  • 例如下图,Feature 1 分支的 A、B、C 三个提交记录,使用 rebase squash 后会在主分支变为一个提交记录 F。

在这里插入图片描述

0.4 💥超级注意事项💥

❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌
❌❌❌避免在公共分支上使用 rebase❌❌❌❌
❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌

⏹不要在已经推送到公共仓库的分支上使用 rebase:变基会重写提交历史,这会使其他基于这些提交的工作分支出现冲突。
如果你在公共分支上使用 rebase,其他开发者可能会遇到合并冲突,并且需要强制拉取和合并他们的工作,这会带来很多不必要的麻烦。

⏹如果将本地分支的代码已经推送到远端,并且远端的代码并没有被合并到任何分支中,并且没有任何人基于你的分支进行开发,
此时rebase操作不会对别人的开发带来影响。


一. 代码已提交,未推送,交互式变基

1.1 通过SourceTree操作

🤔变基可以将多次本地提交合并为一次提交,简化提交履历。
💥注意:多次提交只是提交到本地Git仓库,并没有推送到远端仓库。

⏹如下图所示,我们分3次提交了代码到本地Git仓库,这3次提交都只是添加了console.log语句,
因此可以合并为一次提交然后推送到远端仓库

在这里插入图片描述

⏹交互式变基操作如下所示,选中要合并的提交的前一次提交,点击交互式变基功能,
然后将多次提交合并为一次。

在这里插入图片描述

1.2 通过Git命令行操作

⏹如下图所示,我们分3次提交了代码到本地Git仓库,这3次提交都只是添加了console.log语句
这次我们使用Git命令行的方式,将这三次提交合并为一次。

在这里插入图片描述

1.2.1 进入命令行终端,指定交互变基版本

⏹通过SourceTree的命令行模式进入Git命令行终端

在这里插入图片描述

⏹指定交互变基的版本为最近的3次提交
git rebase -i HEAD~3

1.2.2 指定需要处理的提交

⏹如下图所示,在vim模式下处理指定的提交

  • pick:保留该提交。
  • reword:保留该提交,但允许你修改提交信息。
  • edit:保留该提交,但在此提交暂停,允许你进行更改。
  • squash:将此提交与前一个提交合并,并保留两个提交的信息。
  • fixup:将此提交与前一个提交合并,但丢弃此提交的信息。
  • drop:删除该提交。

在这里插入图片描述

⏹如下图所示,指定后两次提交与第一次提交合并,同时丢弃后两次的提交信息

  • ffixup的简写

同时指定要修改提交的消息的版本

  • rreword的简写

在这里插入图片描述
⏹修改完成之后,在vim模式下按下ESC之后,输入wq保存

1.2.3 指定提交信息

⏹如下图所示又进入编辑提交信息的界面,编辑完成之后,同样在vim模式下按下ESC之后,输入wq保存

在这里插入图片描述

⇓⇓⇓⇓

在这里插入图片描述

1.2.4 查看修改效果

⏹如下图所示,提交记录变成了一个,提交更加整洁了!

在这里插入图片描述


二. 代码已提交,已推送,交互式变基

2.1 通过命令行进行交互式变基,合并提交

⏹如下图所示,有3次打印消息,都已经推送到远端。

在这里插入图片描述

⏹在git终端通过下面的命令对最近3次提交进行交互式变基。

git rebase -i HEAD~3

在这里插入图片描述

⏹效果如下

在这里插入图片描述

2.2 将合并的提交推送到远端

2.2.1 遇到的问题

⏹ 直接推送的话,会发生如下图所示的错误

在这里插入图片描述

2.2.2 通过命令行强制推送

git push origin 分支名称 --force

在这里插入图片描述

⏹效果如下

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Gooxi受邀参加第三届中国数据中心服务器与设备峰会
  • AGI 之 【Hugging Face】 的【问答系统】的 [评估并改进问答Pipeline] / [ 生成式问答 ] 的简单整理
  • django ninja get not allowed 能用 put delete
  • 2.The DispatcherServlet
  • GitHub连接超时问题 Recv failure: Connection was reset
  • MacOS 通过Docker安装宝塔面板搭建PHP开发环境
  • 输入网址到网页显示的过程
  • 如何在勒索软件攻击中幸存下来:最佳备份实践、勒索拦截方案
  • 【Visual Studio】Visual Studio使用技巧及报错解决合集
  • 软件测试——测试用例
  • 【C++精华铺】12.STL list模拟实现
  • 【低照度图像增强系列(8)】URetinex-Net算法详解与代码实现(2022|CVPR)
  • 手机和电脑通过TCP传输(一)
  • 第一节Linux常见指令
  • CV11_模型部署pytorch转ONNX
  • Asm.js的简单介绍
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • C++类中的特殊成员函数
  • CSS相对定位
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript设计模式系列一:工厂模式
  • java第三方包学习之lombok
  • leetcode46 Permutation 排列组合
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • REST架构的思考
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • ViewService——一种保证客户端与服务端同步的方法
  • Zsh 开发指南(第十四篇 文件读写)
  • 给初学者:JavaScript 中数组操作注意点
  • 解决iview多表头动态更改列元素发生的错误
  • 近期前端发展计划
  • 前端工程化(Gulp、Webpack)-webpack
  • 什么是Javascript函数节流?
  • 写给高年级小学生看的《Bash 指南》
  • 一些css基础学习笔记
  • linux 淘宝开源监控工具tsar
  • 第二十章:异步和文件I/O.(二十三)
  • ​​​【收录 Hello 算法】9.4 小结
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (¥1011)-(一千零一拾一元整)输出
  • (6)添加vue-cookie
  • (9)目标检测_SSD的原理
  • (void) (_x == _y)的作用
  • (十六)一篇文章学会Java的常用API
  • (实战篇)如何缓存数据
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)视频码率,帧率和分辨率的联系与区别
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @Autowired 和 @Resource 区别的补充说明与示例