Github 上如何提交 pull request
什么是复刻(forking)?
我们可以通过复刻操作将喜爱的仓库保存自己的Github账户中,以便独立地对其进行操作。
通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响到原始仓库。
具体操作可以查看我的上一篇文章:Github Fork的使用
什么是拉取请求(pull request)?
拉取请求是为团队项目或开源项目做贡献的一种方式。
例如,一个名为Harry forks的用户复刻了一个属于ThanoshanMV的仓库并对其做了一些变更,Harry可以向ThanoshanMV发起一个拉取请求,不过是否接受取决于ThanoshanMV。这就好像是在说:“ThanoshanMV,你可以拉取我所做的变更吗?”。
为开源项目做贡献
除了编写代码,还有许多其他方式可以为开源项目做贡献。下面介绍一些可选的贡献方式。
唯视锐 公司的骇客入门指南为我们介绍了以下几种为开源项目做贡献的方式:
设计工作:构建整个项目的布局,提升可用性,提升导航和菜单的用户体验,创作项目logo、3D打印和艺术T恤,提供样式指导等。
文档工作:编写、完善或者翻译项目文档,编写项目相关的时事通讯,编写教程,筛选邮件列表中的亮点内容,创建项目使用示例合辑等。
整理工作:链接重复的议题,提议新的议题标签,提议关闭过时的未解决议题,针对近期的议题抛出问题以推动相关讨论。
提供帮助:在议题下解答问题,审查他人提交的代码,为其他贡献者提供指导。
编写代码:协助解决议题中提及的问题,询问是否需要自己提供帮助来增加新的功能特性或改进工具和测试流程。
创建第一个拉取请求!
如果你还不太熟悉 Git 和 GitHub, 请查看 The beginner’s guide to Git & GitHub.
1. 复刻仓库
点击页面顶部的“fork”按钮即可复刻仓库,这将在你的账户中创建此仓库的完整实例。

2. 克隆仓库
现在你的账户中已经包含了这个仓库,将它克隆到本地来进行编辑。
点击“clone”按钮,复制下面的链接。

打开终端并执行如下命令,把仓库克隆到本地。
$ git clone [HTTPS ADDRESS]
现在我们建立了远程仓库的master分支的一个副本。
运行如下命令,进入项目目录:
$ cd [NAME OF REPOSITORY]

3. 创建一个分支
不管是对于小项目还是团队协作的项目,使用仓库时,最好新建一个分支。
分支名称应该保持简短,并且能够反映我们所做的工作。
使用 git checkout 命令来创建一个分支:
$ git checkout -b [Branch Name]

4. 进行更改并提交
对项目进行必要的更改并保存。
执行 git status , 查看变更。
执行 git add 命令,将这些变更加入到刚刚创建的分支:
$ git add .

使用 git commit 提交这些变更:
$ git commit -m "Adding an article to week 02 of articles of the week"

5. 把变更推送到Github
在推送变更之前先确认远程库的名称。
$ git remote

当前仓库对应的远程库名称是“origin”。
确认了远程库的名称之后,可以放心的把变更推送到Github。
git push origin [Branch Name]

6. 创建拉取请求
在Github仓库中可以看到一个“Compare & pull request”按钮,点击它。

请提供必要的说明来介绍你所做的变更(可以使用“#”来引用议题)。提交拉取请求。
恭喜!你已经成功创建了第一个拉取请求。

如果拉取请求被接受的话,你将会收到邮件通知。
7. 同步复刻的master分支
在向原始仓库提交拉取请求之前,必须先将原始仓库的最新内容同步到本地仓库。
即使没打算提交拉取请求也应该及时同步,因为自你复刻仓库之后,原始仓库中的项目可能添加了一些新的功能特性或者修复了一些bug。
按照以下步骤来更新你的master分支:
1.首先查看当前所在分支。
$ git branch

这将列出所有分支,并以绿色来指明当前或活动分支。
2. 切换到master分支。
$ git checkout master

3. 将原始仓库添加为upstream仓库。
为了能够拉取原始仓库的变更到你的复刻仓库中,需要将原始仓库添加为upstream仓库。
$ git remote add upstream [HTTPS]
这里的 [HTTPS] 是你从原始仓库页面复制的URL。

4. 获取原始仓库的变更
从原始仓库获取变更,所有提交到原始仓库的变更将会保存在本地的upstream/master分支中。
$ git fetch upstream

5. 合并变更
将upstream/master分支中的变更合并到本地的master分支,这样就能够做到让本地的master分支与原始仓库保持同步的同时保留本地变更。
$ git merge upstream/master
6. 把变更推送到Github
现在你的本地分支已经与原始仓库的master分支同步了。如果想更新Github仓库,需要把变更推送到Github。
$ git push origin master
注意: 在同步了master分支之后,可以移除upstream仓库。不过以后同步的时候还会用到,所以最好留着它。

$ git remote rm [Remote Name]
7. 删除无用的分支
创建分支是为了完成一些特定目标,目标完成之后,这些分支就没必要继续存在了,可以删除掉。
$ git branch -d [Branch Name]

Github上的无用分支也可以删除。
git push origin --delete [Branch Name]

总结
Github是一个强大的版本历史控制工具,每一个人都可通过发起拉取请求来为开源项目做贡献,而且除了编写代码之外还有许多方式可以做出贡献。
最后要说的是,如果你的拉取请求没有被接受也不要感到困惑,维护者们花费了大量的时间精力来优化项目,他们比我们更加了解整个项目,所以他们知道如何做出合理选择。
相关文章:
Github 上如何提交 pull request
什么是复刻(forking)? 我们可以通过复刻操作将喜爱的仓库保存自己的Github账户中,以便独立地对其进行操作。 通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响…...
Redis面试知识
概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能…...
Spring面试重点(四)——Spring事务
Spring事务 事务的方式 spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解Transa…...
♡ — MySQL 存储引擎
MySQL 存储引擎架构 MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要;存储引擎是基于表的,而不是数据库。 MyISAM 和 InnoDB 的区别 MySQL 5.5 之前&am…...
大数据技术架构(组件)34——Spark:Spark SQL--Optimize
2.2.3、Optimize2.2.3.1、SQL3.3.1.1、RB1、Join选择在Hadoop中,MR使用DistributedCache来实现mapJoin。即将小文件存放到DistributedCache中,然后分发到各个Task上,并加载到内存中,类似于Map结构,然后借助于Mapper的迭…...
Zookeeper实现分布式锁
文章目录ZK节点类型watch监听机制Zookeeper实现分布式锁锁原理创建锁的过程释放锁的过程ZK锁的种类代码实现Zookeeper是一个开源的分布式协调服务,是一个典型的分布式数据一致性解决方案。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均…...
MFC 添加重新启动管理器支持
重启管理器是添加到 Visual Studio for Windows Vista 或更高版本操作系统的功能 如果发生意外关闭或重启,重新启动管理器将为你的应用程序添加支持。 重新启动管理器的行为取决于应用程序的类型。 如果你的应用程序是文档编辑器,则重新启动管理器让应用…...
一文带你深刻的进入Python,并且了解Python的优缺点
最近几年Python被吹的神乎其神,很多同学都不清楚Python到底能干什么?就盲目去学习Python,今天我就Python的应用领域来简单盘点一下,让想学习Python 的同学找对方向不迷茫。 2. Python 的特点 这里就谈谈自己的看法,首先 Python是…...
别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)
别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…...
编译原理—翻译方案、属性栈代码
系列文章戳这里👇 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…...
链表
一、从尾到头打印链表题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:使用栈作为中转,可以实现倒置打印classSolution { public:vector<int> printListFromTailToHead(ListNode* head){//使用栈完成中…...
CSS 样式优先级
CSS 样式优先级决定了最终呈现在浏览器中的样式是哪一组样式,在多组样式中有冲突时,最终呈现在浏览器中的样式是具有最高优先级的样式。 CSS 样式优先级顺序如下: 内联样式 > 内部样式 > 外部样式 !important > 内联样式 > ID…...
SpingMVC获取请求参数
通过ServletAPI获取请求参数将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。html<form th:action"{/param/servletAPI}" method"post">用户名:<input ty…...
微搭使用笔记(二)微搭低代码平台介绍及基础使用
概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…...
CountDownLatch的定义、使用 、原理
一、定义 CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程ÿ…...
《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 简介 Azure是微软的公有云,它提供了一些免费的资源,具体可以查看: https:/…...
别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)
别具一格,原创唯美浪漫情人节表白专辑, (复制就可用)(html5,css3,svg)表白爱心代码(3) 目录 款式三:心形实时显示认识多长时间桃花飞舞(猫咪)款 1、拷贝完整源代码 2、拷贝完整js代码 3、修改时间 4、…...
Linux 删除修改日期大于某一天的文件
在服务器运维过程中,我们往往会产生大量的日志文件. 如果日志文件命名能看出日志产生的时间,这些文件是很好删除的. 但有时,我们可能有成千上万的没有命名规律日志文件 下面的方法可以根据日志最后修改时间 批量删除这些文件 先给出完整命令: find /mydir -mtime 10 -name &…...
【算法题】1845. 座位预约管理系统
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 请你设计一个管理 n 个座位预约的系…...
【专业认知】保研北大金融 / 入职腾讯产品经理
2023.02.11 一. 朱博文学长分享——关于大学生活的一点思考 1. 自我介绍 大数据18级 经济学双学位 保研至北大金融硕士 “多思考、多感受、兼听则明” 2. 大学生活 2.1 为什么要上大学 1:追求美好生活的需要 “美好”难以量化,因为每个人对生活…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
