从零开始长期给某开源社区提PR步骤记录

0 前提

安装好git后,在本地配置github账户

git config --global user.name [github账户名称]
git config --global user.email [github注册的邮箱]

verified(签名)your commit

确保已安装gpg工具,可以在git bash中使用gpgconf命令查看是否安装成功

生成密钥

gpg --full-generate-key #生成密钥命令,如实填写信息
gpg --list-secret-keys --keyid-format LONG #查看生成的密钥

红线即为keyid

(可选)git自动签名每一个提交

如果需要频繁签名,为了避免commit时忘记添加-S参数,可以进行以下配置

git config --global user.signingkey [上图红线所示keyid]
git config --global commit.gpgsign true

将生成的密钥登记到github上

导出密钥

gpg --export -a <keyid>


到自己的github主页,settings->SSH and GPG keys
按照提示将上图所示内容复制上去即可。

1 创建自己的远程仓库

明确社区接受pr的分支,将该分支fork到自己的github账户,得到远程仓库

2创建本地仓库和环境

在本地开发环境使用clone命令将远程仓库克隆到本地

git clone [复制自己远程仓库的https地址,应以.git结尾]

设置上游:

git remote add upstream [社区仓库的https地址,应以.git结尾]
git remote -v #查看与远程仓库的连接,origin是自己的仓库,upstream是社区仓库

personal access token

到自己的github主页,settings->developer settings->Personal access tokens -> Generate new token
跟据需要选择该token的应用场景
复制token,到开发环境下执行

git remote set-url [你的remote别名] https://[token]@[你的远程仓库地址]
一般remote的别名在clone仓库时默认为origin

3 开发和提交PR

3.0 一般流程

每次编辑前,在本地的main分支上(别的项目可能是master分支,反正就是本地主要分支,用于和社区远程仓库保持一致。本地名字可以随便起,一般就保持fork时的分支名,即与社区的分支名一致。也可以另外建一个分支用于追踪)执行fetch upstream,追踪一下社区最新代码。

git fetch upstream

再创建一个新的分支b1,切换到该分支,开发本次PR要解决的任务。

git branch b1
git checkout b1

不先在main分支进行同步再创建新分支的后果是,即使基于与之前不同的branch提交新的commit,push后该PR下会包含以前分支下的commit。

此外一个没有commit的修改在branch新分支时会一直保留直到在某个分支下提交。

完成开发后

git status #查看已改动文件、已保存到暂存区文件、已commit待push文件
git add . #将工作区内所有改动文件提交到本地暂存区
git add [文件名]#将指定文件提交到本地暂存区
git commit -S -m 'commit message'#将暂存区所有文件提交,且需要签名(输入github账户密码)
git commit -n [文件名] -m 'commit message'#commit指定文件
git push origin b1#将本地提交推送到自己的远程仓库b1分支下(如前所述分支名字是按需变化的)

打开自己的远程仓库,选择对应的分支,create pull request
按社区要求的格式完成PR相关信息的填写
务必检查自己仓库的分支和远程仓库的分支是否选择正确!!

3.1 接着别人修改的PR继续修改(自己的PR)

首先拉取他人的修改

git pull origin [该分支名]

在本地修改后再按普通流程add, commit, push即可。

3.2 接着别人修改的PR继续修改(别人的PR)

还没实践过,先放下别人的笔记

  • https://blog.csdn.net/yehuozhili/article/details/119647293

  • https://blog.csdn.net/weixin_45903995/article/details/126021367?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-126021367-blog-119647293.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-126021367-blog-119647293.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=6

4 后悔药

4.1 撤销add

git restore --staged <file> #将暂存区的文件从暂存区撤出,但不会更改文件

4.2 在本地撤销commit

git log #查看过往版本,会展示版本号、提交者、commit时的message、提交时间
git reset --soft [版本号]#本地仓库回滚到指定版本号,但是工作区不回滚,该版本之后的提交被撤销
git reset --hard [版本号]#本地仓库和工作区均被回滚

使用soft回滚后可以直接add,commit。只用hard回滚后,工作区没有新内容,没有可以add的文件,需要重新编辑后才能add。

4.3 push后

撤销PR下的部分commit,但是保留PR

撤销一个PR下的部分较晚的commit,保留较早的

git log #查看过往版本,会展示版本号、提交者、commit时的message、提交时间
git reset --hard [版本号]#本地仓库和工作区均被回滚
git pull origin [分支名] force#强制用本地落后的版本覆盖远程仓库新版本

再回到PR 页面检查是否达到目的

关闭整个PR

网上说之有接收方能关闭已经发起的PR
但是实践中发现可以直接在该PR页面,comments最底部找到close按钮,close后还可以reopen。

从零开始长期给某开源社区提PR步骤记录相关推荐

  1. 我写了 ahooks 源码分析系列,收到官方邀请我一起维护,这是一次提 PR 的记录...

    大家好,我是若川.持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  2. 开源社区Review代码步骤

    以Ranger项目为例,说明开源社区Review代码详细步骤. 1.寻找合适的issue进行review 首先自己需要是某个开源项目的committer, 要有合入代码的权限. 2.review代码 ...

  3. 如何给开源项目提过 PR 呢?其实很简单

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 源码共读群里有小伙伴聊到如何给开源项目提PR,所以今天分享这篇文章. 你有给开源的库或者框架提过 PR 吗? 如果 ...

  4. linux内核之旅ppt_一起玩转 Linux 内核之旅开源社区吧

    | 作者:梁金荣 | 转载自:Linux 内核之旅 | 编辑:王皓月 | 设计:朱亿钦 开源社引言 开源社向来是支持本土的开源 Community 的发展的,非常欣喜的看到西安邮电大学的陈莉君教授迈出 ...

  5. 开源社区的长期主义与新变化 — CloudWeGo 开源社区实践

    本文整理自 CloudWeGo 开源一周年技术沙龙活动中字节跳动 CloudWeGo 开源(社区)运营负责人邓逸云的演讲分享,技术沙龙主题为<字节高性能开源微服务框架:CloudWeGo> ...

  6. 如何提交一个PR?【OpenHarmony成长计划】【OpenHarmony开源社区】

    文章目录 如何提交一个PR GIT的基本原理 PR实操 基本工具和配置环境 GIT工具 补充SSH公钥 配置提交信息 安装代码以及文档编辑IDE 让我们实操一下,进入PR对话之旅 Fork官方仓库 C ...

  7. 别害羞,开源社区真的很需要你,教你如何参与开源社区~

    前言 相信各位开发者多多少少会在实际开发的过程中会使用一些开源的技术,例如前端的 vue, react, 以及大量的第三方库如 echart,color.js, day.js 等等,后端就更多了,从到 ...

  8. 大咖访谈 | 开源社区里各种奇怪的现状——夜天之书陈梓立tison

    本期访谈阵容 嘉宾:陈梓立tison,夜天之书作者.Apache Member & 孵化器导师.Apache Flink Committer. 主持:庄表伟,开源社理事.华为开源管理中心开源专 ...

  9. 堵俊平:开放治理是开源社区的终极之路 | DEV. Together 2021 中国开发者生态峰会...

    点击上方"开源社"关注我们 | 作者:堵俊平 | 转载自:开发者生态 | 编辑:刘雪洁 | 设计:宋传琪 | 责编:王玥敏 内容来源: 2021 年 6 月 5 日,由 Segme ...

最新文章

  1. Connection cannot be null when 'hibernate.dialect'
  2. SparkStreaming运行出现 java.lang.NoClassDefFoundError: org/apache/htrace/Trace 错误
  3. 启动Memcached报错:/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-2.1
  4. 15.10.4 捕获异常
  5. Java中wait和sleep方法的区别
  6. bread是可数还是不可数_凡是规则,皆有例外——规则的可数名词复数,真的规则吗?...
  7. C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)
  8. 【数据仓库】数据仓库的发展史
  9. 详细了解一下股票量化交易接口股
  10. 基于aircrack-ng、crunch的wifi握手包爆破
  11. 解决台式机麦克风不可用问题,只有音频输出,无音频输入
  12. oracle安装后,电脑变得很卡,解决办法(安装的是oracle11g)
  13. 高性能网站架构之缓存篇—Redis集群搭建
  14. 新款戴尔取消开盖自动开机办法,以戴尔7591为例子如下
  15. H264视频传输、编解码----FFmpeg软解码
  16. 电商项目_使用Quick BI 可视化工具进行展示
  17. 解密Android7.0 8.0进程保活与拉活的实现方式 如何才能让APP常驻内存 躲避系统的追杀
  18. 想不明白这三点,就不要跳槽!
  19. 【FiddlerTX插件】使用Fiddler抓包腾讯课堂最新版下载
  20. 安装Ubuntu14.04与Windows10双系统(Legacy 模式)

热门文章

  1. 缩小贫富差距和增加人口的唯一办法
  2. 【进度总结】软件工程选题报告
  3. 个人发展:提高自己的竞争力(清楚自己专长与弱项的人就会划定一个做事的边界,不去做越界的事情。)
  4. ASP.NET Core网站使用Nginx布署Linux上配置和发布及相关代码
  5. 15 个 Kubectl 现有命令使用技巧 - 拿来即用
  6. 5张对比图告诉你,天地图,高德地图,百度地图,谷歌地图区别
  7. SAP EWM 与 WM 比较
  8. MySQL数据库概述以及环境搭建
  9. 湖北技能高考计算机本科学校有哪些,2019湖北技能高考学校名单以及分数线
  10. springboot:整合easypoi