新手第一个 GitHub PR 完整指南:从找 issue 到被合并(2026 版)
结论先说:第一个 PR 能不能被合并,七成取决于选题,不是技术。正确做法是——①用 github.com/ 或 goodfirstissue.dev 找活跃的中小仓(近 30 天有提交、维护者会回 issue、最近合并过陌生人的 PR),别冲十万星明星仓;②先在 issue 下留言认领、讲清打算怎么改,等维护者点头再动手;③fork → 开分支 → 只改一件事 → PR 描述写清"改了什么/为什么/怎么验证"。2026 年维护者正被 AI 刷出来的 PR 淹没,GitHub 已允许仓库关闭或限流外部 PR,所以一个想清楚的小 PR,远胜十个凑数 PR。
为什么 2026 年的"第一个 PR"比三年前难,以及这对你意味着什么
先讲清楚形势,否则你会用 2022 年的攻略撞 2026 年的墙。过去两年开源社区发生的最大变化是:提交 PR 的成本被 AI 打到接近零,但 review 的成本一点没降。维护者的耐心变成了稀缺资源,而你正在和一堆机器人抢这个资源。
几组已核实的数据:
- 新人的 good first issue(GFI)PR 合并率在掉。EASE 2026 的一篇纵向研究(Hoshikawa 等,分析了 37 个热门 GitHub 仓库、40.6 万个 issue 和 1117 个新人 GFI PR,时间跨度 2021 年 7 月至 2025 年 6 月)发现:新人 GFI PR 的合并率从 61.9% 跌到 42.2%;带 GFI 标签的 issue 占比从 2024 年 1 月起出现统计显著下降;而新人对 GFI 的关注度一直稳定在约 27%。翻译成人话:想进来的人没变少,门变窄了。
- 一次性贡献者受伤最重。2026 年 7 月的论文《"AI Slop is DDoSing Open Source"》(Afroz 等,样本为 294 个 5000 星以上仓库、200 多万个 PR 与 issue、35.7 万名贡献者)测到:AI 普及后 PR 数量增加 6.80%(约每周多出 520 个 PR、一年约 2.7 万个),整体合并率下降 1.06%,但一次性贡献者的合并率下降了 18.18%,老贡献者只降 3.45%。维护者的原话是「拒绝这些 PR 花的时间比自己写还多」。
- 连 curl 都撑不住了。curl 项目在 2026 年 1 月宣布终止运行了六年的漏洞赏金计划(2026 年 1 月 31 日截止)。作者 Daniel Stenberg 写道:往年确认为真实漏洞的提交率在 15% 以上,「2025 年开始,确认率暴跌到 5% 以下」,「无休止的 slop 提交在精神上是严重消耗……浪费掉的时间和精力,同时还在打击我们活下去的意志」。
- GitHub 官方给维护者装了闸门。2026 年 2 月 13 日上线两个仓库设置:完全关闭 PR、或只允许协作者创建 PR(位置:Settings → General → Features)。2026 年 6 月 17 日又上线了限制无写权限用户同时打开的 PR 数量——达到上限后「必须先关闭或合并一个已有 PR,才能再开新的」,维护者可以把信任的贡献者加进白名单。2026 年 6 月 29 日,连 issue 创建也能限制为仅协作者。
| 时间 | 发生了什么 | 对你这个新人的直接影响 |
|---|---|---|
| 2024-01 起 | 热门仓 GFI 标签占比显著下降 | 明星仓里适合新手的活变少了 |
| 2025 全年 | PR 洪水,一次性贡献者合并率 -18.18% | 「随手提一个」的成功率被腰斩 |
| 2026-01 | curl 关停赏金计划 | 顶级项目对陌生人提交的默认信任度降到冰点 |
| 2026-02-13 | GitHub 允许关闭/限制 PR 为仅协作者 | 有些仓你根本提不了 PR,先看 PR 标签页在不在 |
| 2026-06-17 | GitHub 允许限制外部用户的开放 PR 数 | 一次开五个 PR 刷数量的路被物理堵死 |
反常识的一条:那篇 EASE 2026 论文还发现,PR 描述的长度和代码改动量与是否被合并没有显著相关性。也就是说,堆字数、堆改动量救不了你。决定成败的是别的东西——选题准不准、沟通对不对、维护者信不信任你。这正好是这篇文章后面要讲的。
怎么找到"能合上"的第一个 issue:选仓远比选题重要
GitHub 官方的机制是这样的:项目维护者给 issue 打上 good first issue 标签,GitHub 用算法把「最容易上手的 issue」推到各处曝光,官方文档明确说「加上 good first issue 标签能提高你的 issue 被推荐的概率」。对贡献者这边,官方给的入口是——直接访问 github.com/,就能看到这个项目所有新手友好的 issue。这个 URL 很多人不知道,比在 issue 列表里翻标签快得多。
全站搜索:把筛选条件焊死
在 GitHub 搜索框里直接粘贴(官方 issue 搜索限定符,可自行替换语言和日期):
is:issue state:open label:"good first issue" language:Python no:assignee archived:false created:>2026-05-01 comments:<5
| 限定符 | 作用 | 为什么对新人关键 |
|---|---|---|
no:assignee | 没人被指派 | 避免撞上别人已经在做的活 |
archived:false | 排除归档仓 | 归档仓根本合不了 PR |
created:>2026-05-01 | 只看新 issue | 三年前的 GFI 大概率已经烂掉或被悄悄修了 |
comments:<5 | 讨论还不多 | 评论一堆的多半已经有人在抢 |
label:"help wanted" | 换个标签再搜一遍 | 很多项目不用 GFI,只用 help wanted |
可用的聚合工具站(2026 年 7 月实测在线)
| 站点 | 特点 | 适合谁 |
|---|---|---|
| goodfirstissue.dev | 按语言分类(Python/TypeScript/Go/Rust 等十几种),点一下就换列表 | 还没想好方向、想快速扫一遍 |
| up-for-grabs.net | 收录"主动想要外部帮忙"的项目,可按标签/语言筛 | 想找愿意带人的项目 |
| codetriage.com | 订阅仓库,每天往邮箱推一个待处理 issue(站上显示约 1 万个仓库、10 万名开发者) | 坚持不下来、需要外部推力的人 |
| forgoodfirstissue.github.com | GitHub 官方做的、面向公益/社会影响类项目的 GFI 聚合 | 想让简历上的项目有故事感 |
| github.com/topics/good-first-issue | 按 topic 浏览自称新手友好的仓库 | 想直接挑仓库而不是挑 issue |
选仓的六条硬筛(这一步花 20 分钟,能省你两周)
- Star 数 200–5000。低于 200 通常没人 review,高于 5000 你在跟全世界抢。
- 最近 30 天有 commit。看仓库首页最后一次提交时间,超过三个月的直接跳过。
- 最近合并过"陌生人"的 PR。这是最关键的一条:打开 Pull requests → 筛选
is:pr is:merged,翻最近 20 个,看有没有非 member/collaborator 标记的人被合并、平均多久合。如果最近三个月只有核心团队的 PR 被合并,这个仓对外人是关着的,别浪费时间。 - PR 标签页还在、且没被限制。2026 年 2 月起维护者可以直接关掉 PR 或限制为仅协作者,先确认你提得进去。
- 有 CONTRIBUTING.md,且写了怎么跑测试。没有这个文件的项目,你多半会卡在环境上。
- issue 下面有维护者说话。一个维护者从不回 issue 的项目,你的 PR 也不会有人看。
为什么不建议冲明星大仓:ESEC/FSE 2020 那篇经典研究分析了 816 个热门项目的 9368 个 GFI,结论是——只有 14.0% 的 GFI 是被"提交数少于 3 次"的真新人解决的,40.9% 根本不是新人解决的,而且 GFI 通常比普通 issue 花更久才被解决。明星仓的 GFI 一挂出来,几分钟内就被熟手或机器人捡走了;你抢到的概率,和你技术好不好基本无关。
认领 issue 的正确姿势:九成新人死在动手之前
典型的失败路径是:看到一个 issue,闷头写了三天代码,PR 一提,维护者回一句「这个方向我们不打算做」或者「已经有人在做了,见 #892」。三天蒸发。
正确顺序永远是:读文档 → 留言认领 → 等回复 → 再动手。而且 GitHub 官方已经在探索"必须先有关联 issue 才能开 PR"的门槛机制,早点养成这个习惯不吃亏。
动手前必读的三个文件
CONTRIBUTING.md:怎么跑测试、代码风格、要不要签 DCO/CLA、PR 标题格式(很多项目强制 Conventional Commits)。CODE_OF_CONDUCT.md:扫一眼就行。- 项目的 AI 政策:2026 年这条最容易踩雷,下面单独有一节讲。
认领留言模板(英文,直接改)
Hi! I'd like to work on this if it's still open.
My read of the problem: `parse_headers()` in `src/parser.py:88` assumes
`headers` is non-empty, so an empty list raises IndexError (matches the
traceback above).
Proposed fix: return early when `headers` is empty, and add a regression
test in `tests/test_parser.py`.
Does that match what you had in mind? Anything I should watch out for?
这段话的三个作用:证明你真的读过代码(给出了文件和行号)、给出方案而不是只喊口号、把决策权留给维护者。只回一句「I'll work on this」的人,维护者见得太多了,绝大多数从此消失。
几条实操规矩
| 情况 | 怎么做 |
|---|---|
| 留言后 3–7 天没人理 | 换一个 issue。别删评论(万一后来回你了),也别在同一个 issue 下反复催 |
| 已经有人留言认领了 | 换一个。抢同一个 issue 是 Hacktoberfest 官方点名的"低质量"行为之一 |
| 想一次开好几个 PR 提高命中率 | 别。2026 年 6 月起维护者可以限制你同时打开的 PR 数,超了就得先关掉一个;而且 GitHub 使用条款明确禁止垃圾内容和虚假活动 |
| 维护者说"go ahead" | 尽快做,最好一周内出 PR。拖太久别人会接手 |
| 做到一半发现做不动 | 回去说一句"I'm stuck on X, releasing this issue"。这比消失体面得多,而且维护者会记住你 |
完整命令行流程(可直接抄)
两条路:用 GitHub 官方 CLI(gh)省事,或者纯 git。下面给的是 gh 版,纯 git 的等价写法写在注释里。
# 0. 一次性配置:用真名和 GitHub 账号绑定的邮箱
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# 1. Fork + 克隆。gh 会把你的 fork 设为 origin,原仓库自动设为 upstream
gh repo fork owner/repo --clone
cd repo
git remote -v # 确认 origin=你的fork,upstream=原仓库
# 纯 git 版:网页点 Fork,然后
# git clone git@github.com:YOURNAME/repo.git && cd repo
# git remote add upstream https://github.com/owner/repo.git
# 2. 每次动手前先同步主干
gh repo sync
# 或:git fetch upstream && git switch main && git merge --ff-only upstream/main
# 3. 开分支。一个分支只干一件事,分支名带上 issue 号
git switch -c fix-1234-empty-headers
# 4. 改代码 → 本地跑测试和 lint(具体命令看 CONTRIBUTING.md)
# 例:pytest tests/test_parser.py -q
# pre-commit run --all-files
# 5. 提交。-s 会加上 Signed-off-by(DCO 签名),vLLM 等大量项目强制要求
git add -p
git commit -s -m "fix(parser): guard against empty header list"
# 6. 推到自己的 fork
git push -u origin fix-1234-empty-headers
# 7. 开 PR。--web 会打开网页让你补充描述(推荐,别用 --fill 草草了事)
gh pr create --repo owner/repo --base main --web
# 8. review 之后改代码:追加 commit,别改历史
git add -p && git commit -s -m "review: use explicit None check"
git push
# 9. 只有维护者明确要求 rebase/squash 时才改历史
git fetch upstream && git rebase upstream/main
git push --force-with-lease # 永远别用裸的 --force
新手最常踩的坑
| 坑 | 后果 | 正解 |
|---|---|---|
直接在 main 分支上改 | 之后没法同步上游,第二个 PR 会带上第一个的提交 | 永远 git switch -c 新分支 |
顺手把 .idea/、__pycache__、格式化整个文件的改动一起提交 | diff 从 5 行变成 500 行,维护者直接关掉 | git add -p 逐块确认;提交前 git diff --stat 自查 |
| 本地没跑测试就提 PR | CI 红了,你在维护者眼里的印象分归零 | 先本地绿,再 push |
review 后用 --force 强推 | 可能覆盖掉维护者的改动,或让已有 review 评论全部失联 | 用 --force-with-lease,且只在被要求时改历史 |
| 顺手"优化"了旁边看不顺眼的代码 | PR 范围失控,讨论从 5 行变成路线之争 | 另开 issue 说明,别夹带 |
PR 描述模板与三个必须勾对的选项
PR 描述的唯一目的是降低维护者 review 你的成本。curl 项目那句话可以刻在脑门上:「黄金法则是,一份贡献带给项目的价值应当高于 review 它所花的时间。」
可直接套用的模板
## What
Guard `parse_headers()` against an empty header list.
## Why
Closes #1234. `parse_headers()` indexes `headers[0]` unconditionally, so an
empty list raises IndexError instead of returning an empty dict
(traceback in the issue).
## How
- Return an empty dict early when `headers` is falsy (src/parser.py:88)
- Add regression test `test_empty_headers` in tests/test_parser.py
## Testing
- [x] `pytest tests/test_parser.py -q` passes locally (Python 3.12, Ubuntu 24.04)
- [x] `pre-commit run --all-files` clean
- [ ] Not tested on Windows
## Notes
I used an AI assistant to draft the test case; I have reviewed and run every
line myself. Happy to change the approach if you'd prefer handling this in
the caller instead.
三个技术细节,错一个白干
Closes #1234只在 PR 目标是默认分支时才生效。GitHub 官方文档写得很清楚:这些关键词只有在 PR 指向仓库默认分支时才会被解析;指向其他分支时关键词被忽略,合并后不会关闭 issue。可用的关键词共九个:close/closes/closed、fix/fixes/fixed、resolve/resolves/resolved。- 勾上 "Allow edits from maintainers"。这样维护者可以直接在你的分支上小修一下就合并,能救回很多本来会拖死的 PR。但注意:如果你的 fork 里含有 GitHub Actions workflow,这个选项会变成 "Allow edits and access to secrets by maintainers",官方明确提示这可能泄露 secrets 的值并授予其他分支的访问权——涉及 workflow 的 PR 要谨慎。
- DCO 与 CLA 分清楚。DCO 是在 commit 里加一行
Signed-off-by:(git commit -s自动生成),vLLM 的文档原话是「Commits must include aSigned-off-by:header which certifies agreement with the terms of the DCO」。CLA 则是一份要在网页上签的授权协议(Google、CNCF 系项目常见),机器人会在 PR 里贴链接给你。忘了签 DCO 的话,CI 会直接红,而且需要 rebase 重签,很烦——第一次提交就带上-s。
PR 描述里别写什么
- 别写 "Please merge my PR, I need it for my resume/Hacktoberfest"。
- 别贴大段 AI 生成的、结构工整但没信息量的说明(维护者一眼就能认出来,且现在这是负面信号)。
- 别写 "fixed some bugs" 这种描述。一个 PR 只解决一个问题,标题就该说清是哪个。
- 别把 issue 里的内容原样复制过来当描述。
用了 AI 写代码怎么办?2026 年的红线在哪
这一节比技术更重要,因为踩了会直接把你钉在维护者的黑名单上。
先说结论:AI 辅助本身不违规,"不看就提"才违规,"不声明"在越来越多项目里也违规。
vLLM 的规定(可以当通用标准背下来)
- 「Do not submit "pure agent" PRs. The human submitter is responsible for reviewing all changed lines, validating behavior end-to-end, and running relevant tests.」——不许提纯代理生成的 PR;人类提交者要对每一行改动负责,要做端到端验证,要跑相关测试。
- 「Always mention when a pull request includes AI-generated code. Add a note in the PR description.」——含 AI 生成代码必须在 PR 描述里注明。
- 提交里建议用
Co-authored-by:这类 trailer 标注,同时保留你自己的 DCO 签名。
各项目政策大致分三档
社区里有个专门的追踪仓(melissawm/open-source-ai-contribution-policies),已收录 300 多个项目的 AI 政策:
| 档位 | 典型项目 | 你该怎么做 |
|---|---|---|
| 明确禁止 | Zig(原文"Strict No LLM / No AI Policy")、Alacritty、Bevy、GIMP、Gentoo、Forgejo 等 | 要么完全手写,要么换项目。别赌 |
| 允许但必须声明 | curl、Django、LLVM、Linux Kernel、Apache Airflow、Cilium 等,多数要求在 commit 里加 Assisted-by: / Generated-by: 之类的标记 | 老老实实按它规定的格式标 |
| 允许但人类全责 | NumPy、Kubernetes、pandas、PyTorch、vLLM | 逐行 review + 跑测试 + PR 里说明 |
提交前的自检四问
- 这段 diff 里的每一行,我能不能对着维护者口头解释为什么这么写?
- 我有没有在本地真的跑过测试,而不是让 AI 说"应该能过"?
- 代码里有没有 AI 编造的 API、不存在的函数签名、抄自其他项目的实现?
- 如果维护者问「为什么不用 X 方案」,我答得上来吗?
GitHub 产品经理 Matthew Isabel 在讨论这件事时说过一句挺公道的话:「我们不认为统计 AI 生成的 PR 数量是正确的指标……一个糟糕或跑题的 PR 就是糟糕的 PR,不管它从哪来。」所以别怕用工具,怕的是你自己没看懂就发出去。行业里也有从业者给出过很难听但真实的观察:用 AI 生成的 PR 里大约十个才有一个达到能开 PR 的标准。你要做的就是那一个。
顺带说明我们自己的立场:OfferBoost 的开源 PR 辅导不代写、不刷量、不做"包合并"承诺——那些做法在今天不但没用,还会毁掉你的 GitHub 账号信誉。我们能做的是帮你选到匹配水平的仓和 issue、把英文沟通和 PR 描述打磨到维护者愿意看、以及 review 卡住时帮你判断该怎么回。合不合,最终还是维护者说了算。
被 review 之后怎么回应(拿到 merge 的最后一公里)
很多人的 PR 死在这一步:收到一堆 review 评论,心态崩了,就此消失。要知道 "Changes requested" 不是拒绝,它恰恰说明维护者愿意在你身上花时间。真正的拒绝是直接 close 或者永远不回。
review 话术对照表
| 维护者说 | 潜台词 | 你该做的 |
|---|---|---|
| "Can you add a test for this?" | 没测试不可能合 | 补测试,回复 "Added in |
| "Nit: ..." | 小意见,改了没坏处 | 直接改,别争论,一句 "Done" 即可 |
| "Why not use X instead?" | 真的在问,背后可能有历史原因 | 先问 "Is that because of Y? I chose this because...",别闷头重写 |
| "Please rebase / resolve conflicts" | 你落后主干了 | git fetch upstream && git rebase upstream/main 然后 --force-with-lease |
| "Could you split this?" | PR 范围太大 | 拆成两个 PR,第一个只留最没争议的部分 |
| 沉默两周 | 忙/被 PR 淹了,不是针对你 | 第 7–10 天礼貌 bump 一次,一次就够 |
| "Closing for now, thanks!" | 方向不对,但对你没恶意 | 道谢 + 问一句 "What kind of approach would you consider?",然后换 issue |
操作层面的四条
- 改动用新的 commit 追加,不要 amend 已有 commit。reviewer 可以只看增量 diff,省他很多时间;合并时项目通常会 squash,你不用担心历史脏。
- 每条评论都要回。改了就回 "Done",不改就说明理由。全部沉默地推一版新代码,reviewer 得自己一条条比对,这很招人烦。
- "Resolve conversation" 按钮尽量留给 reviewer 点。你自己一键全 resolve,会显得在掩盖没解决的问题。
- 响应速度就是信任度。72 小时内回复。真的有事(期末、实习)就直说 "I'll get to this next week",维护者完全能理解,怕的是人间蒸发。
英文别硬凹
短句、直给、有具体信息,比华丽的长段落好得多。不要把整段回复丢给 AI 润色成公文腔——2026 年的维护者对那种语感极度敏感,读到会默认你的代码也是没看过就发的。写不出来就写最朴素的:"Fixed. I moved the check into `validate()` as you suggested. Tests pass locally." 这样就很好。
前三个月的可执行路线(附时间盒和验收标准)
别设"我要成为核心贡献者"这种目标,设可验收的小目标。
| 阶段 | 目标 | 验收标准 |
|---|---|---|
| 第 1 周 | 把工具链跑通 | 能在本地 fork 一个仓、跑通它的测试套件、成功推一个分支到自己的 fork |
| 第 2 周 | 选定 3 个候选仓 | 每个仓都通过前面那六条硬筛,且你能说出它最近合并过哪个陌生人的 PR |
| 第 3–4 周 | 第一个 PR:文档/测试类 | PR 已提交,且不是纯 typo(见下) |
| 第 5–8 周 | 第二个 PR:小 bugfix | 能复现 bug、写出回归测试、独立跑通 CI |
| 第 9–12 周 | 在同一个仓里做第三个 PR | 维护者认识你了,review 轮次明显变少 |
为什么强调"在同一个仓里做三个":前面提到的研究显示,随着贡献次数增加,同一个人在同一项目的 PR 接受率会明显上升(研究测到 Ansible 从 54.2% 升到 80.0%、Rails 从 61.3% 升到 81.4%、Kubernetes 从 49.1% 升到 74.3%,跨度是前 50 个 PR)。在一个仓里深耕的回报,远高于在十个仓各提一个。面试时"我在 X 项目连续贡献了三个 PR,维护者后来会 at 我看相关 issue",也比"我给十个项目改过错别字"强一百倍。
关于 typo PR 的争议
从文档入手没问题,但要注意 Hacktoberfest 官方规则明确把这些列为低质量/spam:「脚本化地开 PR 去删空格、改错别字或压缩图片」「拿别人的分支或提交去开 PR」「任何看起来像是在给自己刷 PR 数量的行为」「为同一个问题开多个不必要的 PR,比如开 6 个 PR 去删一个多余空格」。而且累计两个被判定为 spam 的 PR,账号就会被取消资格。
安全的做法:文档类 PR 要有实质——补一段缺失的安装步骤、修正一个已经过时的 API 示例、把一个跑不通的 quickstart 修好并说明你在什么环境验证过。这些同样是文档 PR,但维护者会真心感谢你。
Hacktoberfest 相关(2025 年版规则,2026 年是否举办以官网为准)
- 目标是 10 月 1–31 日提交 6 个高质量 PR,且需要维护者接受才计数。
- 项目需带
hacktoberfesttopic 才算参与,或者单个 PR 被打上hacktoberfest-accepted标签。 - 所有 PR 有七天审核窗口,期间维护者可以反悔。
- 「Any user with two or more spammy PR/MRs will be disqualified.」
这段经历怎么写进简历
写可点开验证的东西:项目名 + PR 链接 + 一句话说清你解决了什么问题和影响面。例如「为 XXX(3.2k star)修复了空 header 导致的解析崩溃,附回归测试,已合并(PR #1234)」。不要写"参与开源项目开发"这种没法核实的话,也不要把 star 数、下载量说成是自己的成果。面试官真的会点开链接看 diff——这既是风险,也正是这条经历比大多数课程项目值钱的原因。
常见问题
完全没有开源经验,从零到第一个 PR 被合并,现实一点要多久?
把工具链跑通通常 1 周,选仓和选题 1 周,写代码到提 PR 1-2 周,review 到合并少则两三天、多则一两个月(取决于维护者忙不忙)。整体给自己留 4-8 周比较现实。真正的时间大头不是写代码,是选到一个对的 issue 和等 review。如果你三周还没提出第一个 PR,问题基本出在选仓上,不是能力上。
英文不好,能做开源吗?
能,但必须用英文沟通(除非是中文社区项目)。实际用到的英文比想象中简单:认领 issue、说明改了什么、回复 review,都是短句。建议自己先写,再用工具检查语法,但不要让 AI 把整段润色成华丽的长文——2026 年的维护者对那种"AI 腔"非常敏感,读到会怀疑你的代码也没自己看过。朴素直白的短句反而加分。
React、Kubernetes、PyTorch 这种明星项目的 good first issue,能碰吗?
可以看,但别把它当第一个 PR 的目标。研究数据显示,热门项目的 GFI 只有约 14% 是被提交数少于 3 次的真新人解决的,四成根本不是新人解决的;而且新人 GFI 的合并率这几年从 61.9% 掉到了 42.2%。明星仓的 GFI 挂出来往往几分钟内就被熟手接走。建议先在 200-5000 星、维护者会回 issue 的活跃仓里做出 2-3 个已合并的 PR,再去冲大仓。
我用 Copilot / Claude 写的代码,能提 PR 吗?
取决于项目。三种情况:一是明确禁止的(如 Zig 的"Strict No LLM / No AI Policy"、Alacritty、Bevy、GIMP 等),别赌;二是允许但要求声明的(curl、Django、LLVM、Linux 内核等,多要求在 commit 里加 Assisted-by / Generated-by 标记);三是允许但要求人类全责的(vLLM、Kubernetes、NumPy、PyTorch 等)。vLLM 的规定可以当通用标准:不许提"纯代理"PR,提交者要逐行 review、端到端验证、跑测试,并在 PR 描述里注明含 AI 生成代码。动手前一定先读该项目的 CONTRIBUTING.md。
PR 被 close 了,会在 GitHub 上留下不好的记录吗?
被 close 的 PR 会公开留在你的 profile 上,但没人会因为一两个被关掉的 PR 就否定你——被关的原因大多是方向不合或项目已改,不是你写得烂。真正会伤到账号的是另一类行为:批量提交无意义 PR、刷贡献数、抄别人分支,这些既违反 GitHub 使用条款里关于垃圾内容和虚假活动的规定,也可能导致账号被限制。质量永远优先于数量。
改文档、写翻译算不算真正的贡献?
算,前提是有实质内容。补齐缺失的安装步骤、修正过时的 API 示例、把跑不通的 quickstart 修好并注明你在什么环境验证过——这些维护者会真心感谢。但纯粹删空格、批量改错别字是另一回事,Hacktoberfest 官方规则明确把"脚本化开 PR 去删空格、改错别字"列为低质量行为,累计两个 spam PR 就会被取消资格。
为什么建议在同一个仓库连做几个 PR,而不是广撒网?
因为信任是累积的。有研究测到,同一贡献者在同一项目里随着 PR 数增加,接受率显著上升(Ansible 从 54.2% 升到 80.0%、Rails 从 61.3% 到 81.4%、Kubernetes 从 49.1% 到 74.3%,跨度为前 50 个 PR)。而且 2026 年 6 月起 GitHub 允许维护者把信任的外部贡献者加进白名单,深耕的好处更明显。简历上"在一个项目持续贡献"的说服力,也远高于"给十个项目各提一个 PR"。