在 GitHub 上为项目作贡献,是开发者和协作者协作实现共同目标的一项必备技能。 无论是修复 bug、添加功能,还是改进文档,贡献的过程都有助于实现结构化的高效协作。
通过遵循 GitHub 分叉存储库、创建分支和提交拉取请求的流程,可以建议对项目进行更改并获取反馈,而不会中断其他人的工作。
本指南提供有关使用 GitHub UI 和命令行参与项目的说明。 有关使用 GitHub Desktop 参与的详细信息,请参阅 从 GitHub Desktop 克隆和派生存储库。 有关 GitHub CLI(命令行接口)的相同功能, 请参阅 GitHub CLI 快速入门。
关于复刻
如果你想为别人的项目做贡献,但没有直接修改权限,你可以创建该项目的副本,进行更新,然后建议将这些更新合并到主项目中。 这个过程通常被称为“创建分支和拉取请求”工作流。
创建自己的项目副本(或“分支”)时,就像是创建一个与原始项目共享代码的新工作空间。 这对于开源项目或没有原始项目的写入访问权限的任何时候都很有用。
在副本中进行更改后,可以将其作为拉取请求提交,这是向主项目提出更改的一种方式。 有关详细信息,请参阅“为存储库创建分支”。
创建您自己的项目副本
本教程使用 Spoon-Knife 项目,这是一个托管在 GitHub 上的测试仓库,可让你测试派生和拉取请求工作流。
-
导航到位于
Spoon-Knife的 https://github.com/octocat/Spoon-Knife 项目。 -
在页面右上角,单击“分支”****。

-
在“所有者”下,选择下拉菜单,然后单击分支存储库的所有者。
注意
如果用户名灰显,是因为该分支已存在。 这时应改为更新现有的分支。 有关详细信息,请参阅“同步分支”。
-
默认情况下,分支的名称与其上游存储库的名称相同。 (可选)若要进一步区分分支,请在“存储库名称”字段中键入名称。
-
(可选)在“描述”字段中键入分支的描述。
-
(可选)选中“仅复制默认分支”****。
对于许多分支场景(例如参与开源项目),你只需复制默认分支。 如果未选择此选项,所有分支都将复制到新分支中。
-
单击“创建分支”****。
注意
如果要从上游存储库复制其他分支,可从“分支”页执行此操作****。 有关详细信息,请参阅“管理存储库中的分支”。
将分支克隆到计算机
你已成功分叉 Spoon-Knife 存储库,但目前它仍只存在于 GitHub 上。 为了能够处理该项目,您需要将其克隆到您的计算机。
可以使用命令行GitHub CLIGitHub Desktop或命令行克隆分支。
-
打开 GitHub,导航到 Spoon-Knife 存储库的 分支 。
-
在文件列表上方,单击“ Code”****。

-
复制存储库的 URL。
-
若要使用 HTTPS 克隆存储库,请在“HTTPS”下单击 。
-
要使用 SSH 密钥克隆存储库,包括组织的 SSH 证书颁发机构颁发的证书,请单击“SSH”,然后单击 。
-
要使用 GitHub CLI 克隆存储库,请单击“GitHub CLI”,然后单击 。

-
-
在 Mac 或 Linux 上,打开终端。 在Windows上,打开 Git Bash。
-
将当前的工作目录更改为您想要存储克隆目录的位置。
-
键入
git clone,然后粘贴之前复制的 URL。 看起来会像这样,用你的 GitHub 用户名代替YOUR-USERNAME:git clone https://github.com/YOUR-USERNAME/Spoon-Knife -
按 Enter。 将创建您的本地克隆。
$ git clone https://github.com/YOUR-USERNAME/Spoon-Knife > Cloning into `Spoon-Knife`... > remote: Counting objects: 10, done. > remote: Compressing objects: 100% (8/8), done. > remove: Total 10 (delta 1), reused 10 (delta 1) > Unpacking objects: 100% (10/10), done.
创建分支以处理
在对项目进行更改之前,您应创建一个新分支并切换到该分支。将更改保留在各自的分支中,可以遵循 GitHub 工作流,并确保将来再次为同一项目做贡献时更加容易。 请参阅“GitHub Flow”。
git branch BRANCH-NAME
git checkout BRANCH-NAME
创建和推送更改
继续操作,使用你喜欢的文本编辑器对项目进行一些更改,例如 Visual Studio Code。 例如,可以更改文本 index.html 以添加 GitHub 用户名。
当您准备好提交更改时,请暂存并提交更改。
git add . 告诉 Git 你希望在下一次提交中包含所有更改。
git commit 会拍摄这些更改的快照。
git add .
git commit -m "a short description of the change"
暂存和提交文件时,你主要是告诉 Git:“拍摄我的更改快照。” 你可以继续进行更多修改,并创建更多提交快照。
目前,您的更改仅存在于本地。 准备好将更改推送到 GitHub远程时,请将更改推送到远程。
git push
创建拉取请求
创建拉取请求是对他人项目创建分支后所做工作的最后一步。 当你完成了一个有益的更改并希望将其提议到原始仓库中时,你将需要创建一个拉取请求,供维护者评审。
为此,请导航到项目所在位置的 GitHub 存储库。 在本示例中,它位于 https://github.com/<your_username>/Spoon-Knife。 你将看到一个横幅,指示你的分支是 octocat:main 之前的一个提交。 单击“参与”,然后单击“打开拉取请求” 。
GitHub 将转到一个页面,其中显示了分支和 octocat/Spoon-Knife 存储库之间的差异。 单击“创建拉取请求”****。
GitHub 将转到一个页面,可在其中输入标题和更改说明。 重要的是要提供尽可能多的有用信息,并说明您提出此拉取请求的理由。 项目所有者需要能够确定您的更改是否像您认为的那样对每个人都有用。 最后,单击“创建提交请求”。
熟悉项目
如果你不熟悉项目,则可以使用 Copilot 它来帮助了解存储库的目的、检查文件以及深入了解特定代码行。 请参阅 使用GitHub Copilot浏览项目。