【Python程序开发系列】聊一聊github的pull request几种合并方式

一、什么是PR

      在正常的工作流程中,PR 用于将一个分支的更改合并到另一个分支,而这些更改通常以提交的形式存在。每个提交都有一个唯一的提交 ID,用于标识和跟踪更改的历史。因此一般情况下PR包含源分支的多个commit提交记录(pr_commit_ids),也有可能不包含任何commit。

      如果一个 PR 没有任何提交 ID,可能有以下几种情况:

  • PR 是空的:这意味着在创建 PR 之前,没有进行任何代码更改或提交。可能是由于误操作或其他原因,未正确添加更改并提交到分支中。
  • PR 的提交已被删除:在某些情况下,可能会发生提交被删除或重置的情况。如果在创建 PR 之前提交已被删除,那么该 PR 将不包含任何提交 ID。
  • PR 是用于讨论或协作:有时,团队成员可能会创建一个 PR,以便进行讨论、提出问题或请求反馈,而不涉及实际的代码更改。这种情况下,PR 可能只包含标题、描述和评论等信息,而没有实际的提交。

      无论是哪种情况,一个没有提交 ID 的 PR 通常不会触发自动化构建、测试或代码审查等流程,因为没有实际的代码更改需要进行处理。

二、PR合并的三种方式

      一旦创建PR就就意味着你发起了分支1(head,源分支)------->分支2(base,目标分支)的合并请求,就会产生一个PR链接:(如:https://github.com/quwenqiang2019/xxxxxx/pull/6),此时这个PR的状态是open,合并这个PR通常有三种方式,合并完成之后PR的状态就是merged或closed。如果PR没有合并,继续向源分支进行提交,这些创建PR之后新的提交将自动包含在该 PR 中。

2.1 create a merge commit

        这是最基本的merge,这种情况下,pr包含的commit_ids(源分支的所有提交记录)会同步到中央仓库目标分支里面,合并之后目标分支上还会产生一个merge commit id。这个merge commit id就是将pr包含的commit_id(源分支的所有提交记录)会同步到中央仓库目标分支这个操作的提交。

2.2 squash and merge

        这种情况下,pr包含的commit_ids(源分支的所有提交记录)不同步中央仓库目标分支里面,这种方式,当前分支(源分支)的多个提交会被压缩,在目标分支上形成一个提交(merge commit id),这个merge commit id就代表压缩源分支多个提交这个操作。

2.3 rebase and merge

        这种情况下,pr包含的commit_ids(源分支的所有提交记录)通过变基,在目标分支上形成多个新的commit id逐个应用到目标分支上。这些新的提交会按照原始提交的顺序添加到目标分支上,形成一个线性的提交历史。因此变基(rebase)操作不会产生合并提交(merge commit id)。

三、一个简单的例子(merge合并)

pulls/20:

图片

PR包含的commit_id是指源分支所有单个提交的commit_id(这其实是本地git commit产生,然push进行同步),而不是合并提交的merge_commit_id。merge_commit_id是合并操作的结果。61a0c56是pulls/20合并操作产生的merge_commit_id,是合并完成之后目标分支的最新commitID。

pulls/21:

图片

这个PR(源分支上)有三次提交记录,包含三个commitID。我们一起通过API看下这个PR的详细信息:

源分支:

图片

  • label是标签名称

  • ref是源分支名称

  • sha是源分支上最新的commit_id,也就是最后(最新)一次提交的commit_id

目标分支:

图片

  • label是标签名称

  • ref是源目标名称

  • sha不是pulls/21合并产生的,是目标分支上最新的commit_id(由于目标分支上没有新的提交,这里也就是上一次pulls/20合并产生的commitID)

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

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

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

相关文章

数据结构_找环,破环题-2.5

一. 判断单链表有无环 a. 错误的思路:遍历陷入死循环 1)和相交的遍历思路一样,找指向相同。 错误点 一直在死循环。 思考点:如何破环 b. 个人思路:反转链表回首结点 1)目前的经验,无非就…

无人机集群协同导航构型自适应选择算法

无人机集群协同导航构型自适应选择算法 Evandworld E-mail:evandworldfoxmail.com 摘要 针对卫星定位系统用于无人机集群时成本高、精度低等问题,本文提出一种基于卡尔曼滤波和概率的无人机集群构型自适应选择算法。在自适应扩展卡尔曼滤波的基础上&a…

kubernetes部署nacos2.3.0

一、nacos简介 nacos官网地址 简单易用 动态配置管理、服务发现和动态的一站式解决方案,20多种开箱即用的以服务为中心的架构特性,基本符合生产要求的轻量级易用控制台。 更适应云架构 无缝支持 Kubernetes 和 Spring Cloud,在主流公共云上…

Qt:QFileDialog

目录 一、介绍 二、功能 三、具体事例 1、将某个界面保存为图片,后缀名可选PNG、JPEG、SVG等 一、介绍 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录。 QF…

Debezium发布历史111

原文地址: https://debezium.io/blog/2021/10/07/incremental-snapshots/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Incremental Snapshots in Debezium October 7, 2021 by Jiri Pechanec mys…

linux虚拟机升级g++编译器版本

原先的 更新你的软件包列表: sudo apt update 添加Ubuntu Toolchain PPA(Personal Package Archive),这是一个提供较新编译器版本的第三方软件源: sudo add-apt-repository ppa:ubuntu-toolchain-r/test 再次更新软件包…

Tokitsukaze and Short Path (plus minus)

一、Tokitsukaze and Short Path (plus) 解析: 容易知道 对于 u 和 v 两点之间的距离是 2*max(a[u],a[v]),同时这也是这两个点的最短距离,因为如果想要绕路的话,就必须再至少经过一个点,这样的话,就会使得两者的距离变…

RTthread线程间通信(邮箱,消息队列,信号/软件中断)---02代码分析邮箱和消息队列

RT-Thread代码分析 这是源码分析, 实际使用看这个 信号看这个 看这一篇之前最好看一下我的RT-Thread对象管理以及线程管理, 时钟管理 邮箱 实际是实现是一个对环形缓存区的使用 struct rt_mailbox {struct rt_ipc_object parent; /**< inherit from…

python进行批量搜索匹配替换文本文字的matlab操作实例

在进行一些数据处理时&#xff0c;可能需要抓取原文中的一些内容&#xff0c;批量替换原文另外的一些内容&#xff0c;而且事先还需要一步搜索匹配的步骤。 举个例子&#xff0c;如下matlab输出的txt文件&#xff0c;原文件有几万行数据&#xff0c;这里只摘取3行对应的 文件文…

R语言:箱线图绘制(添加平均值趋势线)

箱线图绘制 1. 写在前面2.箱线图绘制2.1 相关R包导入2.2 数据导入及格式转换2.3 ggplot绘图 1. 写在前面 今天有时间把之前使用过的一些代码和大家分享&#xff0c;其中箱线图绘制我认为是非常有用的一个部分。之前我是比较喜欢使用origin进行绘图&#xff0c;但是绘制的图不太…

vite+vue3发布自己的npm组件+工具函数

记录一下个人最近一次发布npm组件的过程&#xff1a; 一、创建组件和工具函数 执行命令创建一个空项目&#xff1a; npm create vite 创建过程稍微有些慢&#xff0c;不知何故&#xff1f;其中选择vue , 个人暂时使用的JS 。在 src 目录下面创建一个文件 package 存放组件和公…

【Java八股面试系列】JVM-垃圾回收

目录 垃圾回收 堆空间的基本结构 内存分配和回收原则 分代收集机制 Minor GC 流程 空间分配担保 老年代 大对象直接进入老年代 长期存活的对象将进入老年代 GC的区域 对象存活判定算法 引用计数法 可达性分析算法 finalize() 字符串常量判活 类判活 垃圾回收算…

1、将 ChatGPT 集成到数据科学工作流程中:提示和最佳实践

将 ChatGPT 集成到数据科学工作流程中:提示和最佳实践 希望将 ChatGPT 集成到您的数据科学工作流程中吗?这是一个利用 ChatGPT 进行数据科学的提示的实践。 ChatGPT、其继任者 GPT-4 及其开源替代品非常成功。开发人员和数据科学家都希望提高工作效率,并使用 ChatGPT 来简…

提示工程实战案例

如果你在 2023 年听说过生成式人工智能&#xff08;Generative AI&#xff09;&#xff0c;你一定也听说过提示工程&#xff08;Prompt Engineering&#xff09;。 通过快速的互联网搜索或质疑 GenAI 本身&#xff0c;人们可以轻松找到相关的定义、提示技术&#xff0c;例如 零…

机器学习---半监督学习简单示例(标签传播算法)

1. 使用半监督学习方法 Label Spreading 在一个生成的二维数据集上进行标签传播 import numpy as np import matplotlib.pyplot as plt from sklearn.semi_supervised import label_propagation from sklearn.datasets import make_circles# generate ring with inner box n_s…

Apache Zeppelin 整合 Spark 和 Hudi

一 环境信息 1.1 组件版本 组件版本Spark3.2.3Hudi0.14.0Zeppelin0.11.0-SNAPSHOT 1.2 环境准备 Zeppelin 整合 Spark 参考&#xff1a;Apache Zeppelin 一文打尽Hudi0.14.0编译参考&#xff1a;Hudi0.14.0 最新编译 二 整合 Spark 和 Hudi 2.1 配置 %spark.confSPARK_H…

tee漏洞学习-翻译-2:探索 Qualcomm TrustZone的实现

原文&#xff1a;http://bits-please.blogspot.com/2015/08/exploring-qualcomms-trustzone.html 获取 TrustZone image 从两个不同的位置提取image 从手机设备本身从google factory image 已经root的Nexus 5设备&#xff0c;image存储在eMMC芯片上&#xff0c;并且eMMC芯片…

分享65个节日PPT,总有一款适合您

分享65个节日PPT&#xff0c;总有一款适合您 65个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1hc1M5gfYK8eDxQVsK8O9xQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…

SQLite database实现加密

注意&#xff1a;以下操作以VS2022为开发工具&#xff0c;以C#为开发语言。 数据加密原因 软件在使用的各个场景&#xff0c;很多都需要数据具有保密性&#xff0c;于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…

Go语言每日一练——链表篇(五)

传送门 牛客面试笔试必刷101题 ----------------合并k个已排序的链表 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的合并链表题目类似&#xff0c;但是由于有K个且时间复杂度要求控制在O(nlogn)&#xff0c;这里主要有两种解法&#xff1a;一种是依旧使用归并来…