Git高级玩法:Rebase、Cherry-pick与Stash实战解析

Git高级功能:理解Rebase、Cherry-pick与Stash

在软件开发过程中,Git作为版本控制系统,已经成为不可或缺的工具。而Git的高级功能,如Rebase、Cherry-pick与Stash,为开发者提供了更多的灵活性和便利性。本文将详细介绍这三种高级功能,帮助读者理解它们的工作原理及应用场景。

1. Rebase

1.1 概念

Rebase是Git中一个非常强大的功能,它可以将提交历史重新整理,使得某一段历史按照特定的顺序进行提交。简单来说,Rebase就是将现有的提交历史进行“重塑”,以便让某部分提交按照我们期望的顺序进行。

1.2 应用场景

假设你有一个正在开发的feature分支,在这个分支上有多个提交。突然,你的上级告诉你需要先暂停feature的开发,先去修复一个紧急的bug。这时,你可能需要将feature分支上的提交先“保存起来”,等bug修复后再继续开发。这就是Rebase的一个典型应用场景。

1.3 实用技巧与案例

  1. 暂停开发,处理紧急bug
    假设你的feature分支当前提交历史如下:
    A -> B -> C -> D -> E
    
    你想要将C和D这两个提交“保存起来”,等修复完bug后再继续开发,可以这样做:
    git checkout feature
    git rebase -i HEAD~3
    
    打开弹出的编辑器,你会看到类似以下的提示:
    pick C
    pick D
    save E
    
    将E前面的save改为pick,保存并关闭编辑器。这样,C和D会被“保存起来”,等会儿可以重新应用。
    git checkout main
    git pull
    git checkout feature
    git rebase main
    
    此时,你的feature分支上的提交历史变为:
    A -> B -> C -> D -> E -> F
    
    修复完bug后,你可以继续在F后面开发,然后将C和D重新应用:
    git checkout feature
    git rebase -i HEAD~3
    
    这次,将E前面的pick改为apply,保存并关闭编辑器。然后:
    git apply C.rebase
    git apply D.rebase
    
    这样,你的feature分支就回到了暂停开发前的状态:
    A -> B -> C -> D -> E -> F
    
  2. 整理提交历史
    有时候,你可能想要重新安排提交顺序,让历史更加清晰。这时,也可以使用Rebase。
    假设你的提交历史如下:
    A -> B -> C -> D -> E
    
    你想要将C和D的顺序调换,可以这样做:
    git checkout feature
    git rebase -i HEAD~3
    
    打开编辑器,你会看到:
    pick C
    pick D
    pick E
    
    将C和D前面的pick改为reword,保存并关闭编辑器。这样,C和D的顺序就会被调换。
    git checkout main
    git pull
    git checkout feature
    git rebase main
    
    此时,你的feature分支上的提交历史变为:
    A -> B -> C -> D -> E
    

2. Cherry-pick

2.1 概念

Cherry-pick是Git的另一个高级功能,它可以将其他分支上的一个或多个提交“复制”到当前分支。这个功能非常有用,当你想要将其他分支上的某些提交应用到当前分支时。

2.2 应用场景

假设你在feature分支上正在开发一个功能,而在main分支上,你的同事已经修复了一个紧急的bug。你想要将这个bug修复也应用到你的feature分支,可以这样做:

git checkout feature
git cherry-pick main~1

这样,main分支上最新的提交(即修复bug的提交)就会被复制到feature分支。

如果觉得文章对您有帮助,可以关注同名公众号『随笔闲谈』,获取更多内容。欢迎在评论区留言,我会尽力回复每一条留言。如果您希望持续关注我的文章,请关注我的博客。您的点赞和关注是我持续写作的动力,谢谢您的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uView ui 安装步骤

uView是uni-app生态优秀的UI框架 安装说明 由于uView使用easycom模式,让您无需引入组件即可直接使用,但是此功能需要Hbuilder X 2.5.5及以上版本才支持,详见配置easycom组件模式。 easycom打包的时候是按需引入的,您可以放心引入…

关于应用程序自卸载能力的探讨

在当前数字化的时代背景下,应用程序的安装与卸载已成为我们日常生活及工作中常见的操作行为。对于“应用程序能否自我卸载”这一议题,引发了科技领域和广大用户群体的关注与讨论。本文将围绕该主题展开深入剖析,探究其实质内涵以及其可能产生…

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集…

Nmap最常用命令(非常详细)零基础入门到精通,收藏这一篇就够了

nmap是我们最常用的工具。但是命令太多了,没办法全部记下。我们在实际工作中只需要记住最常用的几条命令就行了。 主机发现 里面nmap,我们可以扫描在同一局域网内有哪些设备在线。常用命令如下: nmap 192.168.50.1/24 -sL 上面命令&#…

羊大师分析,羊奶和牛奶哪个更有营养

羊大师分析,羊奶和牛奶哪个更有营养 羊奶和牛奶都是营养丰富的奶制品,它们各自具有独特的营养价值和特点,因此无法简单地判断哪个更有营养。 羊奶中含有较高的脂肪和蛋白质,同时富含矿物质和维生素,如钙、磷、铁、锌以…

JSON 转换问题 $ref“: “$[0].list[1]

现象 [{"delete": false,"index": 0,"list": [{"duration": 71000,"id": 0,"mediumId": 9231114101362,"path": "","point": 100,"title": "垃圾"},{"d…

python | 类与对象

在 Python 中,我们用关键字 class 来定义类: class Player:pass Player 类中只有一条语句 pass,这是 Python 中的特殊语句,没有实际含义。 Python 在执行到它时也什么都不会做。不过它能够保证结构的完整性。例如,我…

揭秘FastStone Capture:一款强大且高效的截图工具

目录 【引子】【FastStone Capture概述】【安装步骤】【使用攻略】【核心功能解析】【总结】 【引子】 在数字化信息时代,无论是工作汇报、在线教学,还是日常交流中,屏幕截图已经成为我们必不可少的辅助工具。今天,我要为大家详细…

git svn混用

背景 项目代码管理初始使用的svn, 由于svn代码操作,无法在本地暂存,有诸多不便,另外本人习惯使用git. 所以决定迁移至git管理 迁移要求: 保留历史提交记录 迁移流程 代码检出 git svn svn_project_url git代码提交 修改本…

编写应用程序,输出满足1+2+3+~+n<8888的最大正整数n

/** * 寻找满足条件的最大整数。 * 程序通过累加整数,直到累加和大于等于给定值(8888)为止,然后输出满足条件的最大整数。 */ public class E { public static void main(String args[]){ int n1; // 从1开始累加整…

得物布局构建耗时优化方案实践

一、背景 当谈到移动应用程序的体验时,页面启动速度是其中至关重要的一点,更快的页面展示速度确保应用程序可以迅速加载并响应用户的操作, 从而提高用户使用 App 时的满意度。在页面启动的整个流程中,随着 UI 复杂度的上升,布局的…

高速口光口通信

1.通过transceiver ip 设置好硬件连接配置 2.open example 用自己的模块替换掉tx和rx数据模块 三:相关信号: 1:tx/rx_rset_done1表示初始化完成

【Java探索之旅】解密Java中的类型转换与类型提升

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、类型转化1.1 自动类型转换(隐式类型转换)1.2 强制类型转换…

Arduino IDE的下载和安装

一、Arduino的介绍 Arduino是一款开源电子原型平台,主要包含两部分:硬件(各种型号的Arduino板)和软件(Arduino IDE)。这个平台由意大利的Massimo Banzi、David Cuartielles等人共同开发设计,并于…

ES分片均衡策略分析与改进

从故障说起 某日早高峰收到 Elasticsearch 大量查询超时告警,不同于以往,查看 Elasticsearch 查询队列监控后发现,仅123节点存在大量查询请求堆积。 各节点查询队列堆积情况 查看节点监控发现,123节点的 IO 占用远高于其他节点。…

【论文阅读】IEEE Access 2019 BadNets:评估深度神经网络的后门攻击

文章目录 一.论文信息二.论文内容1.摘要2.引言3.主要图表4.结论 一.论文信息 论文题目: BadNets: Evaluating Backdooring Attacks on Deep Neural Networks(BadNets:评估深度神经网络的后门攻击) 论文来源: 2019-IEEE Access …

安卓内嵌uniapp的H5页面 android调用h5内部方法

uniapp H5与原生安卓的数据互通和方法调用_安卓代码中调用uniapp中页面中的方法-CSDN博客文章浏览阅读8.7k次,点赞4次,收藏22次。1、准备我这里是uniapp与原生安卓之间的相互调用,也就是原生安卓内嵌H5页面,下面先来准备一下安卓端…

吴恩达 x Open AI ChatGPT ——如何写出好的提示词视频核心笔记

核心知识点脑图如下: 1、第一讲:课程介绍 要点1: 上图展示了两种大型语言模型(LLMs)的对比:基础语言模型(Base LLM)和指令调整语言模型(Instruction Tuned LLM&#xff0…

CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决

在我的一个Cent OS7开发环境中,按https://yeyongjin.blog.csdn.net/article/details/134178420的方法升级GCC版本到8.3.1。 这两天,要用Google的addressSanitizer检验内存问题,加上编译参数后,却发现编译不通过。configure时直接退…

WanAndroid(鸿蒙版)开发的第二篇

前言 DevEco Studio版本:4.0.0.600 WanAndroid的API链接:玩Android 开放API-玩Android - wanandroid.com 1、WanAndroid(鸿蒙版)开发的第一篇 其他一些参考点,请参考上面的WanAndroid开发第一篇 效果 首页实现 整体布局分为头部的Banne…