当前位置: 首页 > news >正文

怎么提Issue与PR

https://www.cnblogs.com/daniel-hutao/p/open-a-pr-in-github.html

https://blog.csdn.net/qq_47733361/article/details/133907433

虽然经常使用github拉开源项目学习,也开源过一些自己写的程序,但是还未实际参与过开源社区😂。

我在了解学习 隐语 的过程中,看到一处文档笔误。然后前两天在隐语群里,也正好看到过一个招募贡献者的帖子。突然就想着是不是自己可以参加一下,因为我对参与开源项目、社区很感兴趣,由此开始第一次提PR。

1.提Issue

1.1 相关知识概念

什么是提issue,Issue(字面意思 “议题”)是项目的「问题跟踪工具」。我认为它是一个反馈问题/提需求 的工具。主要用于记录和解决项目的“待办事项”。

核心用途(什么时候提issue):

  • 反馈 Bug:比如你用某个开源工具时,发现 “点击按钮没反应”“数据计算错误”,就可以提 Issue 告诉维护者 “哪里出了问题、怎么复现”。
  • 提出需求:比如你希望项目增加新功能(“能否加一个导出 Excel 的按钮?”),或优化现有体验(“希望加载速度再快一点”),用 Issue 描述需求细节。
  • 讨论疑问:比如你看项目文档没懂某个功能的用法,或对代码设计有疑问,提 Issue 跟维护者 / 社区讨论。
  • 任务跟踪:团队内部用 Issue 分配任务,记录进度和阻塞点。

作用还是多多的。

特点:

  • 不涉及代码提交:Issue 里可以附截图、日志,但不用写代码。
  • 有生命周期:从 “新建(Open)”→“讨论”→“解决(Closed)”/“关闭(Wontfix,如需求不采纳)”。
  • 可关联其他内容:比如后续用 PR 修复了某个 Bug,可以在 PR 中关联对应的 Issue(如写 “Fixes #123”,PR 合并后会自动关闭 #123 这个 Issue)。

放在这里,我们发现了一个文档错误,所以我们可以提issue告知,维护者或者自己去修改这个问题。

1.2 实操:

image-20251013114437604

在github项目这找到 issue,就可以新建一个issue。

这里我们选择分类,选择第一个(报告bug)

image-20251013114610359

然后就有一个 issue 模版,咱们就按照模版提供的格式,去填写对应信息即可。然后最后提交,就完成了提issue。

image-20251013114700655

这个是我提的隐语的issue:

  • https://github.com/secretflow/secretflow/issues/1953
  • https://github.com/secretflow/secretpad-frontend/issues/44

2.提PR

完成提issue后,我们可以考虑自己去解决这个issue,也可以等待项目维护者或者其他开发者的回复。

如果你想要自己来解决,并且需要修改源码 那么就需要提PR

2.1相关知识概念

PR 是 Pull Request(拉取请求) 的缩写。本质是 “代码层面的贡献请求”:你修改了代码,希望把自己的代码 “合并到项目的主分支”,就需要提 PR 让维护者审核。

核心用途(什么时候提PR):

  • 给开源项目贡献代码:比如你看到某个项目的 Issue 里有个 Bug 没人修,你本地改好后,提 PR 把修复代码 “推给” 原项目,请求维护者 “拉取” 你的代码合并进去。

  • 团队内部代码审核:比如你完成了 “登录模块重构”,把代码推到自己的分支(如 feature/login-refactor),然后提 PR 到团队的主分支(如 develop),让同事审核代码(看有没有 Bug、风格是否规范),审核通过后再合并。

提PR的核心流程(以github为例子)

  1. Fork 仓库:如果是外部贡献者,先把原项目 “复制” 到自己的账号下(比如把 github.com/原作者/项目 Fork 到 github.com/你的账号/项目)。
  2. 本地修改代码:Clone 自己 Fork 的仓库到本地,在分支上改代码(如修复 Bug、加功能),然后 commit + push 到自己的远程仓库。
  3. 创建 PR:在 GitHub 上,进入原项目页面,点击 “New Pull Request”,选择 “你的仓库分支 → 原项目目标分支”,填写 “修改了什么、为什么改”,提交 PR。在自己fork的仓库其实可以看到 compare& pull request ,这也是一个创建PR的入口
  4. 审核与合并:原项目维护者查看你的代码,有问题会提 “审核意见”(如 “这里逻辑有漏洞,需要改”),你修改后再推送代码(会自动更新 PR);审核通过后,维护者点击 “Merge”,你的代码就合并到原项目了。

2.2 实操

1)在github上选择你想要提交PR的项目,先fork到自己的账号下。

2)git clone 下拉自己账号下的 项目仓库

这里下拉完成后,注意检查下自己的git的邮箱,看其是否与github邮箱一致,这一块是要尽量保持一致的,否则提交的PR审查时可能出现问题(比如如果需要CIA签名时,可能绑定不对人)

3)可以开心的修改代码了

编写代码时,注意代码规范。开源项目一般有明确自己的代码规范要求

4)修改好之后,可以提交代码到一个新建分支,并推送

git commit 信息也需要规范,一般是类似这种:

fix:修复 xxxx
docs:修改文档 xxxx

你可以看下历史提交的commit是什么格式的,然后参照下。

feat:新功能(feature),表示增加了新的功能特性。

fix:修补 bug ,说明此次提交是对程序中存在的错误进行修复。

docs:文档(documentation),如果只是对文档进行了更新,比如修改 README.md 文件、API 文档等,就使用这个类型 。

style:格式(不影响代码运行的变动),例如修改了代码的缩进、空格、分号等格式问题,没有改变代码逻辑。

refactor:重构(即不是新增功能,也不是修复 bug),比如对代码结构进行优化、函数拆分等,代码的功能没有发生变化,只是代码的内部实现方式改变了 。

test:增加或修改测试用例,当提交是为了补充测试代码或者修改已有测试代码时使用。

chore:构建过程或辅助工具的变动,比如更新依赖包版本、修改构建脚本等,不直接影响产品功能。

revert:回退到之前的提交版本 ,表示撤销了之前的某次提交。

分支名好像没有比较强制的规范,因为这个分支也只是在你fork的仓库。

5)在github页面创建PR

image-20251010135313258

一般不同开源项目可能有不同的规范,创建的时候会有模版,按照模版写即可。

image-20251013104346871

隐语我最近提的PR(可供参考):

  • https://github.com/secretflow/secretflow/pull/1962
  • https://github.com/secretflow/secretpad-frontend/pull/45

6)很多开源项目要求首次PR时,签署CLA

CLA是贡献者许可协议,主要是明确知识产权,将你写的代码的知识产权授予给项目。

不同开源项目好像有不同的签署方式。隐语项目的签署方式是在PR的评论区,评论一句话即可:

I have read the CLA Document and I hereby sign the CLA

image-20251010152102863

7)项目维护者会去审核你的代码,如果没有问题的话,你的代码就会被合并到项目中。

如果审核人员提出了代码修改意见,可以继续修改代码,然后重新push

image-20251013104438693

3.问题记录

1)git clone 的是原项目的地址,想要切换到自己fork到仓库

git remote -v
git remote set-url origin https://github.com/kongxiaoran/secretpad-frontend.git

2)修改当前项目的git邮箱

git config user.email "12541**59@qq.com"

3)将多次 git commit 合并成一个

比如你本地提交过多次,但是希望自己PR那只有一条提交记录(目的是让提交历史更清晰、规范),可以使用这个方法。

先看下你提交过的记录

(base) kxr@kxrdeMacBook-Pro secretpad-frontend % git log -3
commit 4edc26931e80da9a945a529b9b7d3e628d4e574e (HEAD -> fix-prompt-error)
Author: kongxr <12541**59@qq.com>
Date:   Mon Oct 13 10:59:42 2025 +0800fix: 修复训练流删除不成功时的提示内容错误commit 953c4f123de674f07aa02c09fdf4e0908660fdae (origin/fix-prompt-error)
Author: kongxr <12541**59@qq.com>
Date:   Mon Oct 13 10:23:11 2025 +0800fix: 修复训练流删除不成功时的提示内容错误commit 17935690c12d305681f6d5f92f42baa16a136c1d (tag: v0.12.0b0, origin/main, origin/HEAD, main)
Merge: 9fb2e87 a09c0fa
Author: Rouni Yin <46579290+yinrouni@users.noreply.github.com>
Date:   Thu Dec 19 17:53:31 2024 +0800Merge pull request #38 from secretflow/release/v0.12.0repo-sync-2024-12-19

比如这里我将最近2条commit进行合并,就使用命令:

git rebase -i HEAD~2

Git 会自动打开默认编辑器(如 Vim),显示最近 2 次提交的列表,类似如下:

image-20251013110124928

你可以修改每行开头的命令(如 pick 改为 fixup),实现对提交的处理。

# 下面是注释说明,解释每个命令的含义
# Commands:
# p, pick <commit> = 使用该提交
# r, reword <commit> = 使用该提交,但修改提交信息
# e, edit <commit> = 使用该提交,但暂停变基过程,允许修改提交内容
# s, squash <commit> = 将该提交合并到前一个提交,保留提交信息
# f, fixup <commit> = 将该提交合并到前一个提交,丢弃该提交的信息
# x, exec <command> = 执行 shell 命令
# d, drop <commit> = 删除该提交

若想合并两次提交:将第二个提交的 pick 改为 或 fixup。如果合并超过两个,也是一样的,将那些提交都改成 fixup(最近一次提交用 pick即可)

使用 :wq 保存

这时候再用 git log -2 看下,你就发现合并了。

(base) kxr@kxrdeMacBook-Pro secretpad-frontend % git log -2
commit ca5c62ec517976488cb76d0cc87b98810d7de1d7 (HEAD -> fix-prompt-error)
Author: kongxr <12541**59@qq.com>
Date:   Mon Oct 13 10:23:11 2025 +0800fix: 修复训练流删除不成功时的提示内容错误commit 17935690c12d305681f6d5f92f42baa16a136c1d (tag: v0.12.0b0, origin/main, origin/HEAD, main)
Merge: 9fb2e87 a09c0fa
Author: Rouni Yin <46579290+yinrouni@users.noreply.github.com>
Date:   Thu Dec 19 17:53:31 2024 +0800Merge pull request #38 from secretflow/release/v0.12.0repo-sync-2024-12-19

最后强制推送到远程仓库:

git push --force

如果这个你fork仓库的分支是多人合作,请注意强制推送的风险。

http://www.dtcms.com/a/487172.html

相关文章:

  • wordpress建站资源漂亮的网站设计
  • Flowise 任意文件读写漏洞 | CVE-2025-61913
  • 青岛网站建设平台纯静态网站
  • STM32基于can总线通信控制多个舵机/电机原理及代码
  • 图解AES密钥扩展与加密过程
  • ps如何做网站轮播图泰安企业建站公司哪里找
  • vue疑难解答
  • 【检索:Top K】12、非精准Top K检索权威指南:搜索引擎排序加速的核心技术与实战实现
  • 顺德品牌网站建设优惠做好公众号 网站建设
  • nullptr vs NULL:C/C++ 空指针的演变史
  • 深圳企业网站制作公司介绍网站防盗链设置
  • 搜索别人的网站是带logo的请问怎么做的精准广告投放
  • latex中自定义公式编号
  • 苏州正规做网站公司网站建设初期的需求分析
  • codetop高频(1)
  • LeetCode 994. 腐烂的橘子
  • 网站设计师需要什么知识与技能咸宁网站建设哪家专业
  • Python爬取百度地图-前端直接获取
  • thumos14数据集学习
  • 持续集成/持续部署(CI/CD)
  • HTTPS 的加密过程~
  • 用服务器ip做网站不配置iis做网站
  • 成都企业网站建设哪家好做网站模板链接放哪里
  • 网站手机端做app开发工具网站开发图标
  • 华为OD-21届考研-Java面经
  • PyTorch 实现多种 CNN 模型并采用集成方法提升 CIFAR-10 分类性能
  • 网站建设常用软件宣传链接用什么软件
  • 合肥响应式网站开发方案wordpress 本地 搭建网站
  • 国内做游戏破解的网站专门做2手手机的网站
  • 深度学习进阶(二)——视觉与语言的融合:多模态模型的架构演化