如何给GitHub项目提交PR

Keywords: #技术 #GitHub #Git
Release Date: 2025-07-09
Table of Contents

当你想给一个开源项目贡献代码时,那么如何提交一个 PR 是需要了解的。

推荐文章:如何在 Github 上规范的提交 PR(图文详解) - 知乎

提交 Issue

当你在一个 GitHub 项目中发现了 Bug 时,可以先提交一个 Issue,说明 Bug 如何产生的,Bug 运行环境如何。

比如我在使用 picgo-plugin-compress-next 这个项目时,就发现了一个 Bug:命令行无法配置 TinyPNG 的 API Key,我就可以先在 GitHub 项目主页中提交一个 Issue 说明这个问题。

2025-07-09_22-31-01.webp

picgo-plugin-compress-next 这个项目是 PicGo 的插件,用于给图片进行多种方式的压缩。接下来,我也以这个 GitHub 项目为例,实际操作提交一个 PR。

Fork 项目

提交完 Issue 后,就可以将这个项目 fork 到自己的 GitHub 仓库中,方便进行修改。

2025-07-09_22-33-43.webp

克隆仓库

把这个 fork 下来的仓库代码,克隆到本地。

2025-07-09_22-35-28.webp

git clone https://github.com/Pi3-l22/picgo-plugin-compress-next.git

接着就可以使用 vscode 打开这个项目进行代码的编写了。

创建分支

在正式进行代码修改之前,需要创建并切换到一个本地新分支。

git checkout -b fix-tinypng-config-bug

修改代码

在新分支上就可以开始修改代码,修复 bug。

在这个项目中,我需要先找到源代码文件(不是 dist 目录下的编译文件),应该是 src/index.ts 或类似的 TypeScript 文件。

2025-07-09_22-44-21.webp

找到具体出问题的地方,完成修改。

2025-07-09_22-48-56.webp

测试修复

修改完成后,还需要进行测试。

# 安装依赖
npm install

# 运行所有测试
npm test

# 监听模式运行测试(文件变化时自动重新运行)
npm run test:watch

# 运行测试并生成覆盖率报告
npm run test:coverage

# 编译项目
npm run build

# 监听模式编译(开发时使用)
npm run dev

最后还需要在实际应用(PicGo)中,再次进行功能性测试,看功能是否修改正确,其他功能是否依旧正常工作。

提交并推送更改

在此操作之前,需要确认原项目代码没有修改,如果期间有新的修改,则你的 Fork 仓库中会提示你

This branch is out-of-date

你需要点击 Update branch,它会将原项目的更新同步到你的 Fork 仓库中。

此时你就可以重新拉起代码并解决冲突,再提交。

# 保存本地修改并将工作目录还原到当前HEAD提交状态
git stash

# 从远程拉取最新的项目代码,将派生项目更新同步到本地
git pull

# 将保存的修改还原回当前工作目录
git stash pop

在本地提交更改,并添加详细的 commit 备注信息。

git add .
git commit -m "fix: correct field name in config when condition for TinyPNG API key

- Fixed when condition to use answer[IConfigKeys.A] instead of answer.compress
- This allows TinyPNG API key and auto-refresh options to display correctly"

最后可以推送你的 Fork 仓库。

# 推送到你的fork
git push origin fix-tinypng-config-bug

这里有一个知识点,git push origingit push --set-upstream origin 的区别。

相同点:

  • 它们都会将本地的 fix-tinypng-config-bug 分支推送到远程仓库 origin
  • 如果远程没有这个分支,它们都会创建一个新的远程分支。

不同点:

git push origin fix-tinypng-config-bug,只是一次性推送当前分支到远程。不会建立本地分支与远程分支的追踪关系(tracking)。以后你执行 git pushgit pull 时,Git 可能不知道你要操作哪个远程分支,可能会提示你指定。

git push --set-upstream origin fix-tinypng-config-bug 在推送的同时会建立本地分支与远程分支的追踪关系。以后你可以直接使用:git pushgit pull,而不需要每次都指定远程和分支名。

创建 Pull Request

回到你 Fork 的仓库页面,如果推送成功,则会显示新分支和修改的合并提交信息,点击 Compare & pull request 按钮就可以填写 PR 标题和描述。

2025-07-09_23-33-06.webp

在描述中也可以引用之前创建的 Issue。

2025-07-09_23-37-54.webp

最后点击下方的 Create pull request,即可完成一次 PR 的提交。

2025-07-09_23-46-47.webp

接下来,项目维护者会审核你的 PR,可能会要求一些修改或直接合并。

如果项目有贡献指南,则需要检查项目是否有 CONTRIBUTING.md 文件,了解项目的贡献规范。确保你的代码符合项目的编码风格,PR 符合规范。

删除分支

在 PR 被合并后,可以在原先提交 PR 页面中,点击 Delete branch,来删除分支。

如果该本地项目后续还需要进行其他修改的话,则需要再删除本地分支。

# 删除本地分支
git branch -d fix-tinypng-config-bug

在项目更新后,需要再 git pull 新代码,在此基础上,创建新分支 git checkout -b 进行另外的代码编写。