Git Merge、Rebase 和 Squash 之间的区别

文章目录

    • Git Merge
    • Git Rebase
    • Git Squash
    • 结论

作为一名开发人员,您可能使用过 Git 和 GitHub,掌握了版本控制的要点。通常通过拉取请求将分支的更改集成到主分支中是一项常见任务。许多人的默认选择是“合并”功能。

然而,版本控制领域提供了具有独特功能的替代命令。Git rebase 和 Git squash 这两种先进技术为您提供了一种将更改同步到目标分支的不同方式。

许多开发人员甚至不知道这些命令是什么,只是使用合并命令。如果您有兴趣学习其他方式,合并是一个不错的选择,您可能会喜欢这篇文章。

在接下来的部分中,我们将深入研究 Merge、Rebase 和 Squash 的命令。值得注意的是,这些命令与解决不同任务的算法并不相似。相反,Merge、Rebase 和 Squash 具有相同的基本目的,但提供了有关如何管理分支的不同视角。每个命令都提供了一个独特的视角,您可以通过它来导航和增强分支管理,从而为您的版本控制方法提供多功能性。

Git Merge

Git 合并可视化

Git Merge 是更新分支最常用的方式。它是最常见的,因为它通常是开发人员在学习 Git 时首先学习的同步命令。他们通常不会在不了解合并的情况下深入研究其他命令,例如 rebase 和 squash,因为它们可能会让人不知所措。

合并基本上会创建一个新的合并提交,并将分支中的更改与该合并提交合并到目标分支。它显示您的个人提交和合并提交。

优点
1、易于理解其工作原理
2、拥有两个分支的提交历史

负面影响
1、历史可能是压倒性的和复杂的
2、用太多合并提交填充分支历史记录的可能性

Git Rebase

Git 变基可视化

Git rebase 是另一个常用命令。顾名思义,Rebase 命令将当前分支的头重新设置为上次提交的目标分支。从而产生了一个非常线性的 git 历史。有些人可能更喜欢这种更线性的 Git 历史记录。

优点
1、生成线性提交历史记录
2、输出更干净的项目历史记录,没有合并提交

负面影响
1、变基会改变提交历史记录,可能会给协作者带来混乱或冲突。
2、解决变基冲突通常比解决合并冲突更困难

Git Squash

Git 南瓜可视化

最后一个命令是 Git Squash。顾名思义,它将提交压缩为单个提交,然后合并到目标分支中。它有点同时具有 Merge 和 Rebase 的功能。它创建了一个合并提交,但也保持了项目历史的线性和干净。
但 Git Squash 的问题是我们会丢失各个提交的详细信息。因此,为了获得更清晰的项目历史记录,有关个人提交的大量上下文都丢失了。

优点
1、生成线性且干净的提交历史记录
2、创建合并提交

负面影响
1、压缩和合并时不太详细的提交
2、跟踪单个提交可能很困难,并且可能会导致调试问题

结论

最后,所有三个命令都执行相同的操作,但风格不同。尽管您现在可能没有使用所有这些命令,但了解它们如何工作对于未来的机会或您的个人项目管理可能会很有用。

长话短说

Merge:创建合并提交,提供有关分支的所有信息
Rebase:将当前分支的头部移动到目标分支的最后一个节点,并产生更线性的git历史记录
Squash:将所有提交合并为一个提交,并创建干净的线性历史记录,但不提供有关提交的尽可能多的信息。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

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

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

相关文章

多级缓存(nginx本地缓存、JVM进程缓存、redis缓存)

文章目录 整体示意图1.nginx缓存2.进程缓存Caffeine示例 3.Lua语法(为了在nginx中做编程)4.OpenResty5.封装向Tomcat发送的Http请求,获取数据6.Tomcat集群的负载均衡7.redis缓存8.查询Redis缓存9.Nginx本地缓存 整体示意图 1.nginx缓存 2.进程缓存 Caffeine示例 3.…

纯前端实现加减运算验证码

纯前端实现加减运算验证码 实现效果 //页面展示 <template><view class"form-input-item" style"padding:8rpx 22rpx;"><input class"form-input" placeholder"请输入验证码" type"text" maxlength"6…

使用Python读写Redis——Lists

之前详细介绍了 Redis命令 - Lists命令组常用命令&#xff0c;同样的命令&#xff0c;本文将用python调用redis库封装好的方法。 要操作的Lists命令如下 1、LSET key index value 2、LINSERT key BEFORE|AFTER pivot value 3、LPUSH key value [value …] 4、RPUSH key value …

【加速排坑】docker设置国内image镜像源

第零步&#xff0c;查看阿里最新的镜像源&#xff1a;https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 第一步&#xff1a;在/etc/docker/daemon.json中添加镜像源 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-m…

C++随机数生成:std标准库和Qt自带方法

std标准库 std::rand()是C中的一个随机数函数&#xff0c;它生成一个范围在0到RAND_MAX之间的伪随机整数。 在使用std::rand()之前&#xff0c;需要包含<cstdlib>头文件。 #include <cstdlib> 设置种子 在每次程序运行时&#xff0c;通常需要使用不同的种子值…

基于pyqt5+scapy 根据ip 具体端口 进行扫描 的程序

先给出代码 import sysfrom PyQt5 import uic from PyQt5.QtWidgets import *from scapy.all import * import argparse import logging from scapy.layers.inet import IP, TCP from scapy.sendrecv import sr1class MyWindow(QWidget):def __init__(self):super().__init__(…

【QML COOK】- 010-动态创建组件

上节介绍了Component的概念&#xff0c;本节介绍一下如何使用javascript动态创建对象。 1. 创建工程&#xff0c;新建一个MyComponent.qml的qml import QtQuickRectangle {color: "red" }它很简单就是一个红色框 2. 编辑main.qml import QtQuickWindow {id: root…

Vscode 上安装 Compilot

GitHub Copilot 是由 OpenAI 和 GitHub 开发的 AI 工具。其目的是通过自动完成代码来帮助开发人员使用集成开发环境 &#xff08;IDE&#xff09;&#xff0c;如 Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有已在候补名单上被接受的用户才能访问它。对…

MySQL 管理端口

错误 客户出现 MySQL连接数 超过 最大连接数的现象 ERROR 1040 (HY000): Too many connections 出现该现象&#xff0c;一般的解决方法&#xff1a; 1.修改配置文件中的最大连接数&#xff0c;之后重启数据库 2.如果配置文件中没有设置 连接超时时间的参数。8小时后&#…

xbox如何提升下载速度

Xbox下载速度慢的问题通常是由于网络环境或微软服务器的问题。以下是一些提升Xbox下载速度的方法&#xff1a; 使用加速器&#xff1a;如果您的网络环境不稳定或存在其他问题&#xff0c;可以使用加速器来优化网络环境&#xff0c;从而提高下载速度。检查网络连接&#xff1a;…

gin-vue-admin二开使用雪花算法生成唯一标识 id

场景介绍 需求场景&#xff1a; 总部采集分支的数据&#xff0c;由于分支的 id 是子增的主键 id&#xff0c;所以会出现重复的 id&#xff0c;但是这个 id 需要作为标识&#xff0c;没有实际作用&#xff0c;这里选择的是分布式 id 雪花算法生成 id 存储用来标识&#xff0c;这…

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎&#xff1a;从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…

微服务实战项目_天机学堂01_初识项目

文章目录 一.项目简述二.Jenkins三.模拟真实业务:紧急bug修复和代码阅读 一.项目简述 Q:天机学堂是什么? A:天机学堂是一个基于微服务架构的生产级在线教育项目 主要有两个端(项目已上线,可以点击查看): 管理后台: https://tjxt-admin.itheima.net 其核心业务主体包括老师、…

QT上位机开发(dock窗口在软件布局中的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;一般有主窗口和子窗口之分。主窗口也就是main window&#xff0c;是最重要的操作界面。子窗口就是各种属性配置、参数配置…

NOIP2018提高组day2 - T1:旅行

题目链接 [NOIP2018 提高组] 旅行 题目描述 小 Y 是一个爱好旅行的 OIer。她来到 X 国&#xff0c;打算将各个城市都玩一遍。 小 Y 了解到&#xff0c;X 国的 n n n 个城市之间有 m m m 条双向道路。每条双向道路连接两个城市。 不存在两条连接同一对城市的道路&#xff…

uniapp使用安装sass

1.首先你要安装node-sass npm install node-sass --save-dev2.安装sass-loader npm install sass-loader --save-dev3.修改style标签&#xff0c;声明使用sass <style lang"scss" scoped>

做完十年数据分析后的思考与总结

种一棵树最好的时间是十年前&#xff0c;其次是现在。十年了&#xff0c;本次分享大多来自工作中的日常所思所想&#xff0c;欢迎自取。 01 数据分析的本质 数据是基础&#xff0c;分析才是重点。 行业内有专门的统计岗&#xff0c;就是只负责做好数据统计就可以了&#xff0…

【Python】PyCharm设置控制台输出的行数限制

在使用PyCharm的时候&#xff0c;如果在控制台输出的信息过多室&#xff0c;控制台仅会保留一部分的输出信息。想要改变这个限制&#xff0c;设置方法如下&#xff1a; 进入到PyCharm的安装目录下&#xff0c;我的是C:\Develop\PyCharm202303\PyCharm 2023.3进入bin找到文件id…

sqlite | c++ | demo

sqlite 过得的废话 就不细说了 接下来&#xff0c;主要讲 安装sqlite 然后写一个demo &#xff0c;然后再shell 命令操作sqlite #安装 sqlite 程序 以及开发包 我的linux 环境是centos sudo yum install sqlite-3.7.17-8.el7_7.1.x86_64 sqlite-devel#输入 sqlite3 测试是否安装…

django后台登录:Forbidden (403) CSRF verification failed. Request aborted.

如果您在尝试登录Django后台时遇到了CSRF验证失败的错误&#xff0c;这通常意味着您的浏览器未能提交正确的CSRF令牌&#xff0c;或者Django后端未能验证该令牌。遵循以下步骤来解决这个问题&#xff1a; 清除浏览器Cookies和缓存&#xff1a; 有时候&#xff0c;浏览器的Cooki…