news 2026/9/19 9:58:06

first-contributions 开源贡献实战:从 Fork 到 Pull Request 的完整入门流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
first-contributions 开源贡献实战:从 Fork 到 Pull Request 的完整入门流程

first-contributions 开源贡献实战:从 Fork 到 Pull Request 的完整入门流程

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

本篇技术指南以first-contributions仓库的越南语官方教程(docs/translations/README.vn.md)为主线,系统讲解新手向开源项目提交第一份贡献的完整链路:Fork 复刻 → Clone 克隆 → 创建分支 → 修改文件 → Commit 提交 → Push 推送 → Pull Request 合入请求。读完本文,你将掌握这套在几乎所有开源项目中通用的协作流程,并能独立完成一次真实、可被合并的开源贡献。

项目概览:这个仓库为什么存在

first-contributions是一个专门面向开源新手的教学仓库(MIT 协议),其核心思路是"与其阅读教程,不如真正动手实践":仓库本身就是一个可以安全演练的环境,任何新手都可以按照官方步骤提交自己的名字并触发一次真实的 Pull Request,在真实协作环境中走完全部流程而不用担心破坏项目。

仓库结构本身就体现了这套教学设计:

  • 根目录的 README.md 是英文原版完整教程;
  • docs/translations 目录下提供了近数十种语言的翻译版本,包括中文简体(README.zh-cn.md)、中文繁体(README.zh-tw.md)以及本文所依据的越南语版本(README.vn.md);
  • Contributors.md 是所有贡献者添加自己名字的目标文件,目前已积累数千条贡献记录(文件超过 5900 行),是这套流程被反复验证的活证据;
  • docs/additional-material/git_workflow_scenarios 存放 Git 进阶场景文档;
  • docs/gui-tool-tutorials 存放不使用命令行时的图形化工具教程。

说明:本文所有命令均以当前仓库教程为事实依据。若本机尚未安装 Git,请先按官方 Git 安装指引完成安装(Linux 可参考仓库内 installing-git-ubuntu.md 与 installing-git-arch.md),安装完成后在终端执行git --version验证。

第一步:Fork(复刻)上游仓库

Fork 的含义是"复刻":点击仓库页面顶部的Fork按钮,在你的 GitHub 账号下生成一份该仓库的完整副本。

为什么要先 Fork 而不是直接修改原仓库?因为普通贡献者没有上游仓库的写权限。Fork 之后,你拥有自己副本的完全控制权,可以在其中自由创建分支、提交修改,最后通过 Pull Request 把改动"申请"回原仓库。这一机制也是 docs/how-to-contribute-to-open-source-projects.md 中"Fork and Clone → Create a Branch → Write Clean Code → Test → Open PR"贡献流程的第一步。

第二步:Clone(克隆)到本地

进入你的 GitHub 账号,打开刚才 Fork 出来的仓库,点击Code按钮,再点击copy to clipboard(复制到剪贴板)图标复制仓库 URL。

打开终端,执行:

git clone "url bạn vừa sao chép"

其中"url bạn vừa sao chép"(去掉引号)就是上一步复制到的你名下副本的地址。例如:

git clone https://github.com/<你的GitHub用户名>/first-contributions.git

<你的GitHub用户名>替换成真实用户名后,这条命令会把 first-contributions 仓库的内容完整下载到你的电脑上,生成一个名为first-contributions的本地目录。克隆完成后,本地目录与你 GitHub 上的 fork 副本即建立了origin远程关联,后续git push默认推送的目标就是它。

第三步:创建独立分支

进入仓库目录(如果当前不在此目录中):

cd first-contributions

然后使用git switch命令创建并切换到一个新分支:

git switch -c <tên-nhánh-mới-của-bạn>

教程给出的示例分支名是:

git switch -c thêm-Tran-Ly-Vu

其中thêm是越南语"添加"之意,即用add-你的名字这样的前缀说明分支用途(英文原版 README 中对应示例为git switch -c add-alonzo-church)。分支名并不强制包含add,但用动词前缀表明"为添加名单而创建"的意图是社区常见约定。

补充:如果你的 Git 版本较旧,执行git switch时报 "switchis not a git command" 错误,说明switch子命令在旧版本中尚不存在。此时改用经典写法即可:

git checkout -b <你的新分支名>

checkout -bswitch -c语义等价:-b/-c均表示"创建新分支并立即切换过去"。

第四步:修改 Contributors.md 并提交

用文本编辑器打开仓库根目录的Contributors.md文件,把你的名字添加进去。

这里有一个重要的规范细节:不要加在文件开头或结尾,要加在中间任意位置。原因从文件内容即可看出——贡献者名单是不断追加的开放列表,若所有人都追加到开头或结尾,将不可避免地产生大量冲突;把名字插入中间可以分散写入点,降低与其他人同时提交时的合并冲突概率。

保存文件后,在项目目录执行git status检查工作区状态,你会看到Contributors.md已被标记为已修改(modified)。

接下来用git add把修改加入暂存区:

git add Contributors.md

然后提交:

git commit -m "Them <ten-ban> vào danh sách Cộng tác viên"

<ten-ban>替换为你的名字。这条提交信息是越南语原文,意为"将 <你的名字> 添加到贡献者列表",如果你更习惯英文,写成git commit -m "Add your-name to Contributors list"同样符合规范。提交信息应简明描述改动内容,这是 Pull Request 评审者判断改动意图的第一依据。

第五步:Push 到你的 GitHub 分支

将本地提交推送到 GitHub 上你自己的 fork:

git push origin <tên-nhánh-của-bạn>

<tên-nhánh-của-bạn>替换为第三步创建的分支名。这里origin指代你 fork 出来的远程仓库。

英文原版 README 推荐加上-u参数:

git push -u origin <你的分支名>

-u--set-upstream)会把当前本地分支与远程分支建立跟踪关系,此后在该分支上直接执行git push即可,无需再重复指定远程与分支名。

Push 报错排查:身份认证失败

如果你在 push 时看到类似下面的报错,说明遇到了身份认证问题:

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/<你的用户名>/first-contributions.git/'

自 2021 年 8 月起,GitHub 已移除 HTTPS 方式下的密码(口令)认证,必须改用**个人访问令牌(Personal Access Token)**或SSH 密钥完成认证。仓库教程给出的解决路径是:按照 GitHub 官方的 SSH 密钥教程,为你的账号生成并配置 SSH 密钥,之后改用 SSH 地址访问仓库。

英文原版 README 还给出了两个补充排查步骤:

  1. 执行git remote -v检查当前远程地址。如果输出类似:
    origin https://github.com/your-username/your_repo.git (fetch) origin https://github.com/your-username/your_repo.git (push)

    说明远程仍指向 HTTPS 地址;

  2. 用 SSH 地址覆盖原远程地址:
    git remote set-url origin git@github.com:your-username/your_repo.git

    否则即使配置了令牌,也可能持续被提示输入用户名密码而再次认证失败。

第六步:提交 Pull Request

回到你 GitHub 上的 fork 仓库页面,你会看到页面顶部出现一个Compare & pull request(比较并创建拉取请求)按钮,点击它:

  1. 确认比较基准:base是上游原仓库的主分支(master/main),compare是你刚推送的功能分支;
  2. 确认 diff 中只包含你对Contributors.md的修改;
  3. 点击创建 Pull Request,填写标题与说明后提交。

提交完成后,维护者会审阅你的改动并将其合并进项目主分支。合并成功后,你会收到 GitHub 的邮件通知——至此,你的第一次开源贡献正式完成。

后续行动:庆祝、巩固与进阶

完成这一整套fork → clone → edit → pull request流程,意味着你已掌握开源协作中最高频的标准工作流。教程建议接下来:

  • 通过官方 Web 应用分享你的贡献成果;
  • 在 Web 应用的"项目列表"中挑选带简单 issue(如good-first-issuehelp-wanted标签)的真实开源项目继续练习;
  • 系统学习更完整的开源贡献方法论,可阅读仓库内的 docs/how-to-contribute-to-open-source-projects.md 综合指南。

进阶资料:Git 工作流场景文档一览

完成基础流程后,docs/additional-material/git_workflow_scenarios/additional-material.md 汇总了一系列进阶 Git 技术文档,覆盖真实协作中几乎必然会遇到的场景:

场景文档适用时机
修改最近一次提交amending-a-commit.md需要调整已做的提交(改提交信息或补充遗漏改动),且尚未 push
配置 Git 用户信息configuring-git.md需要精细控制 Git 配置项
保持 fork 与上游同步keeping-your-fork-synced-with-this-repository.md你的 fork 缺少上游仓库的新改动时
把提交移动到其他分支moving-a-commit-to-a-different-branch.md提交落在了错误的分支上
删除文件removing-a-file.md提交前需要从本地仓库移除文件
删除分支removing-branch-from-your-repository.mdPull Request 合并后清理分支
解决合并冲突resolving-merge-conflicts.md多人并行修改同一文件时
回滚已推送的提交reverting-a-commit.md需要撤销已经 push 到远程的提交
压缩多个提交squashing-commits.md评审者要求把多个提交合并为一个信息完整的提交
撤销本地提交undoing-a-commit.md本地仓库状态混乱需要重置
创建 .gitignorecreating-a-gitignore-file.md只提交必要文件,忽略临时与构建产物
存储凭据storing-credentials.md为仓库安全地存储认证凭据(注意遵循工作单位的安全策略)
学习资源索引Useful-links-for-further-learning.md新手与进阶者查找技巧类网站与博客
Gitflow 工作流gitflow.md了解基于分支模型的团队协作规范

其中 keeping-your-fork-synced-with-this-repository.md 尤其值得关注:它解释了开源协作中典型的"三角工作流"——上游公共仓库(upstream)、你的 GitHub fork、你的本地仓库三者之间的同步关系。核心命令链为:

git remote add upstream <上游仓库地址> # 将上游仓库注册为名为 upstream 的远程 git fetch upstream # 拉取上游最新提交 git rebase upstream/main # 将上游主分支的更新变基到本地主分支 git push origin main # 把同步后的主分支推送到自己的 fork

图形化工具教程:不熟悉命令行的替代方案

如果你不习惯命令行操作,仓库在 docs/gui-tool-tutorials 中提供了多款图形化工具的逐步教程,覆盖 Fork → Clone → Branch → Commit → Push → Pull Request 的同样流程:

工具教程
GitHub Desktopgithub-desktop-tutorial.md
Visual Studio 2017github-windows-vs2017-tutorial.md
GitKrakengitkraken-tutorial.md
Visual Studio Codegithub-windows-vs-code-tutorial.md
Atlassian Sourcetreesourcetree-macos-tutorial.md
IntelliJ IDEAgithub-windows-intellij-tutorial.md

此外,docs/cli-tool-tutorials 还收录了git命令行与 GitHub CLI(gh)的专项教程,以及 docs/translations/Translations.md 这一语言索引页,方便不同语言背景的读者获取母语版教程。

仓库内部视角:教程背后的实践验证

从仓库结构可以印证这套教程的真实性与可操作性:

  • Contributors.md已包含数千条来自世界各地贡献者的记录(超过 5900 行),每条记录形如- 名字。这意味着"按教程提交名字 → 维护者合并"的循环已被真实执行了数千次,流程的每一步都经受了实际检验;
  • docs/translations中数十种语言的 README 翻译本身就是开源贡献的产物——任何读者都可以像修改Contributors.md那样,通过翻译或修订文档为项目做贡献,这是从"练习贡献"过渡到"真实贡献"的天然跳板;
  • 进阶与 GUI 教程目录覆盖了从"推送失败"到"合并冲突"的各类真实故障场景,说明教程体系在设计上就面向"会出错的新手",而非理想化的演示路径。

总结:first-contributions 提供了一条低门槛、零风险、可重复的贡献练习路径。按照本文梳理的六步流程——Fork、Clone、创建分支、修改并提交、Push、提交 Pull Request——你可以在几分钟内完成第一次真实开源贡献;而仓库内的进阶文档、GUI 教程与多语言资源,则为你从"完成第一次"走向"持续参与开源"提供了完整的后续学习地图。

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 9:56:44

AI大模型本地部署与工程实践:从配置到应用的全链路指南

9月13日的AI日报来了。我照例先扫了一遍热搜词列表&#xff0c;热度最集中的几个方向其实很有代表性&#xff1a;AI大模型、大模型本地部署配置、AI编程、AI应用开发、AI视频和AI短剧。如果你正准备入局AI应用开发&#xff0c;或者像我一样在折腾本地模型部署&#xff0c;这份日…

作者头像 李华
网站建设 2026/9/19 9:56:14

FLORR.IO 画廊(2):用 WebGL 与参数化设计生成数字花卉作品

从你第一次在时间线上刷到那条花瓣缓缓旋转的短片开始&#xff0c;我就知道会有不少人和我一样&#xff0c;在浏览器标签页里蹲了一晚上&#xff0c;就为了调出自己满意的那朵花。FLORR.IO 这类基于 WebGL 的数字花卉生成工具&#xff0c;最近在创意编程和视觉艺术的小圈子里热…

作者头像 李华
网站建设 2026/9/19 9:55:19

Fastp实战指南:从参数配置到批量处理,全面掌握fastq质控流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 9:54:33

React脚手架从入门到进阶:CRA与Vite对比及工程化实践

很多人在学 React 时都会卡在“脚手架”这一步&#xff1a;跟着教程敲了npx create-react-app my-app&#xff0c;项目是跑起来了&#xff0c;但里面的 Webpack 配置、Babel 配置、react-scripts到底做了什么&#xff0c;完全是一团黑盒。换个场景——公司要用 Vite 搭新项目&a…

作者头像 李华
网站建设 2026/9/19 9:54:06

Claude Code 代码验收实战:从能跑到敢上的完整指南

1. 一个需求做完之后&#xff0c;我才意识到验收才是真正的深水区用 Claude Code 写代码这件事&#xff0c;我算是比较早开始折腾的那批人。从最早在终端里敲claude命令&#xff0c;到后来在 VS Code 里配好插件、调通中文启动器&#xff0c;再到把常用开发工具的配置摸了个遍&…

作者头像 李华