git rebase和git merge在团队协作开发中的用法

news2024/11/15 2:19:15

git rebasegit merge是在日常开发中常用的用于分支合并的命令,也是非常容易误用的两个命令。本文将通过图文的方式去详解二者之间的区别。

git merge

git merge会为本次的合并过程生成一条新的commit,并将该commit添加到目的分支上。通常用于将feature分支的内容向主分支进行合并。

如下图所示,在main分支的c2提交后checkout了一个新分支feature。随后feature分支上提交了c3,c5和c7三个提交。于此同时,main分支也在往前推进,产生了c4,c6,c8三个提交。此时由于feture分支已经开发完毕,向main分支进行合并,在解决完冲突之后,main分支上产生了一个新的提交c9。

git rebase

git rebase是一种变基操作。两个分支有一个最近交汇的点,就称之为"基"。而变基就是移动该"基点",移动之后的效果就像是刚刚checkout分支一样。 该操作通常用于从main分支向feature分支同步最近的改动。

如下图所示,在main分支的c2提交后checkout了一个新分支feature。随后feature分支上提交了c3,c5和c7三个提交。于此同时,main分支也在往前推进,产生了c4,c6,c8三个提交。由于此时feature分支和main分支变得不一致,并且main分支有人也有修改了相同的文件,因此希望拉取到main分支的最新的改动,于是我们checkout到feature分支,然后执行rebase操作。

于是两个分支的公共交点转移到了c8,,并且生成了c3',c5',c7'三个提交。操作完毕后,就好像从main分支的c8节点开始checkout了一个新分支feature1,然后有了c3',c5',c7'三个提交。

在线实验

下面使用在线平台进行git的相关演练,非常推荐使用下面的在线学习平台 git在线操作学习地址,日常使用git的过程中,如果有一些不太确定的操作行为,可以使用该平台验证,这可以节约你的时间。在不知道这个平台之前,我都是去自己的github上新建一个test repo进行验证的。

实验1:git merge

使用下面的语句准备一些提交:

git commit -m "demo"
git checkout -b feature1
git commit -m "demo"
git commit -m "demo"
git checkout main
git commit -m "demo"
git commit -m "demo"

在这里插入图片描述

此时我们将feature1分支上的内容合并到main分支:

git checkout main
git merge feature1

可以看到main分支上有了一个新的提交c7。

实验2:git rebase

使用下面的语句准备一些提交:

git commit -m "demo"
git checkout -b feature1
git commit -m "demo"
git commit -m "demo"
git checkout main
git commit -m "demo"
git commit -m "demo"

此时我们将main分支上的改动内容合并到feature分支:

git checkout feature1
git rebase main

可以看到main和feature1相交的点来到了c6,并生成了c3'和c4'两个提交。

总结!!!!!

merge通常用于从develop分支向master分支合并开发的内容。

例如:我们往master合代码的时候,使用git merge develop --no-ff

rebase通常用于develop分支拉取master分支的最新改动。

例如:我们在push代码前,最好先git stash,然后git pull -r 或者git pull -rebase

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

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

相关文章

【Tensorflow object detection API + 微软NNI】图像分类问题完成自动调参,进一步提升模型准确率!

1. 背景&目标 利用Tensorflow object detection API开发并训练图像分类模型(例如,Mobilenetv2等),自己直接手动调参,对于模型的准确率提不到极致,利用微软NNI自动调参工具进行调参,进一步提…

Keep通过IPO聆讯,3年烧掉16亿

“运动科技第一股”来了! 6月21日,线上健身平台的运营方、北京卡路里科技有限公司(下称“Keep”)已正式通过聆讯,股票代码为810342.HK。 Keep是一家在线健身平台,主要产品包括在线健身内容、智能健身设备…

【python百炼成魔】python之内置函数range

前言 文章目录 前言内置函数 range()三种创建方式1. 只有一个参数的情况2. 给定两个参数的情况3. 三个参数都给定的时候 使用in和not in 来判断指定的整数是否存在1. 判断range生成的序列中是否存在指定的值2. in 和not in 不与range结合的情况 总结 内置函数 range() range()函…

第六章、Linux文件与目录管理

6.1 目录与路径 6.1.1 相对路径与绝对路径 绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。 相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面…

chatgpt赋能python:使用Python获取句柄和发送消息

使用Python获取句柄和发送消息 什么是句柄? 在计算机中,句柄是指一个唯一的标识符,用于引用正在执行的进程或程序。在Python中,我们可以使用win32api模块获取Windows操作系统中的句柄。使用句柄,我们可以与Windows中…

Qt/C++编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)

一、前言 跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯定占用不少CPU资…

DragGAN开源:生成图像流形上的基于点的交互式操作

文旨在解决生成对抗网络(GAN)中控制生成图像的问题。通过“拖动”图像中的任意点,实现用户交互式精确控制生成图像的姿态、形状、表情和布局。 这个名叫DragGAN的模型,本质上是为各种GAN开发的一种交互式图像操作方法。论文以Sty…

215. 数组中的第K个最大元素

题目描述&#xff1a; 主要思路&#xff1a; 利用堆排序实现第k大的数的查找。 class Solution { public:void maxHeapify(vector<int>& a,int i,int heapsize){int li*2,ri*21,lagesti;if(l<heapsize&&a[l]>a[lagest])lagestl;if(r<heapsize&…

iOS应用上架全攻略

目录 引言 一、基本需求信息。 二、证书 一.证书管理 二.新建证书 三.使用appuploader服务同步证书 三、打包 三、审核 四、整体架构流程 五、代码实现 六、总结 引言 上架IOS应用到app store&#xff0c;需要正式的打包证书、证书profile文件和需要使用专用的工具…

越来越“变态”的验证码,到底在验证什么?

验证码要验证的是它所面对的是真实的人还是计算机程序。最开始的验证码非常的简单&#xff0c;只要输入几个数字就可以。不知道从何时开始见证了变得越来越变态&#xff0c;变得花样不断的验证&#xff0c;验证码就不仅仅是视力的挑战了&#xff0c;有的时候已经是视力及智力的…

CB5309高集成国产2.4 GHz射频前端放大器功放芯片

目录 什么是射频前端&#xff1f;CB5309简介芯片特性 什么是射频前端&#xff1f; 射频前端是射频收发器和天线之间的一系列组件&#xff0c;主要包括功率放大器(PA)、天线开关(Switch)、滤波器(Filter)、双工器(Duplexer和Diplexer)和低噪声放大器(LNA)等&#xff0c;对射频信…

【Nginx】第七章 Nginx原理与优化参数配置

7.1 Nginx原理 master-workers的机制的好处 首先&#xff0c;对于每个worker进程来说&#xff0c;独立的进程&#xff0c;不需要加锁&#xff0c;所以省掉了锁带来的开销&#xff0c;同时在编程以及问题查找时&#xff0c;也会方便很多。 其次&#xff0c;采用独立的进程&…

如何直接在线抠图人像?掌握这两个方法,轻松编辑你的照片!

在日常工作和生活中&#xff0c;我们经常需要对照片进行抠图操作&#xff0c;特别是对人像进行抠图&#xff0c;以便更换背景或添加特效。然而&#xff0c;对于那些没有接受过专门培训的人来说&#xff0c;使用复杂的图像编辑软件可能会感到非常困惑和无所适从。别担心&#xf…

如何设置微信小程序启动页及其全屏背景色?

一、设置启动页 打开微信小程序就会进入pages里面的第一个页面&#xff0c;所以只需要在pages.json中&#xff0c;把启动页写在pages的第一项就可以了 二、去掉导航栏&#xff0c;实现全屏显示效果 先清除全局的导航栏标题&#xff0c;在需要全屏的页面&#xff0c;添加以下代…

初级应急响应-Windows-常用命令

命令&#xff1a;regedit 说明&#xff1a;注册表 命令&#xff1a;Taskmgr 说明&#xff1a;任务管理器 命令&#xff1a;Msconfig 说明&#xff1a;系统配置&#xff08;包含启动项&#xff09; 命令&#xff1a;eventvwr.msc 说明&#xff1a;事件查看器 命令&#xff1a;co…

前端(vue)npm如何发布自己的包

1.首先vue create xxx创建一个空的项目&#xff08;lib和local文件夹怎么来看后面的步骤&#xff09; 2.将自己的方法或者组建文件夹放在src同层目录下&#xff0c;我这边是local文件夹 3.在APP.vue页面引入本地文件测试自己的方法有没有问题 4.在package.json中的scripts中配置…

3D轻量化引擎HOOPS Communicator中的反向代理

一、HOOPS Communicator概述 HOOPS Communicator由三个主要组件组成&#xff1a;Web查看器、服务器和数据创作工具 &#xff08;1&#xff09;Web GL Viewer&#xff1a;该组件嵌入在客户端的Web浏览器中&#xff0c;负责显示CAD数据、PMI视图、属性、测量、数据标记等。 服…

【Flutter】包管理(7)Flutter 状态管理 BLoC 从基础到实践

文章目录 一、前言二、BLoC 的基本概念三、在 Flutter 中使用 BLoC四、BLoC 的高级用法五、BLoC 的最佳实践六、购物车应用的实例七、总结一、前言 在 Flutter 开发中,状态管理是一个非常重要的话题。正确的状态管理策略可以使我们的代码更加清晰,更易于维护。 本文将深入探…

【Linux】详解进程控制 ( 再谈进程退出 | 程序替换exec*类型函数 )

再谈进程退出进程程序替换引入程序替换原理有哪些替换函数execl:execlp&#xff1a;execv:execvp:execle: execve: 接续上篇博客 “详解进程控制 ( fork函数 | 写时拷贝 | 进程退出 | 进程等待 )” 再谈进程退出 进程退出会变成僵尸状态&#xff0c;将自己的推出结果写入task_…

芯片等高科技制造业 如何实现安全的跨网数据交换?

芯片是信息产业的基础&#xff0c;一直以来占据全球半导体产品超过80%的销售额&#xff0c;在计算机、家用电器、数码电子、自动化、电气、通信、交通、医疗、航空航天等几乎所有的电子设备领域中都有使用。 所以&#xff0c;对于芯片这种高科技制造业来说&#xff0c;数据的安…