如何给GitHub项目提交PR
Table of Contents
当你想给一个开源项目贡献代码时,那么如何提交一个 PR 是需要了解的。
推荐文章:如何在 Github 上规范的提交 PR(图文详解) - 知乎
提交 Issue
当你在一个 GitHub 项目中发现了 Bug 时,可以先提交一个 Issue,说明 Bug 如何产生的,Bug 运行环境如何。
比如我在使用 picgo-plugin-compress-next 这个项目时,就发现了一个 Bug:命令行无法配置 TinyPNG 的 API Key,我就可以先在 GitHub 项目主页中提交一个 Issue 说明这个问题。
picgo-plugin-compress-next 这个项目是 PicGo 的插件,用于给图片进行多种方式的压缩。接下来,我也以这个 GitHub 项目为例,实际操作提交一个 PR。
Fork 项目
提交完 Issue 后,就可以将这个项目 fork 到自己的 GitHub 仓库中,方便进行修改。
克隆仓库
把这个 fork 下来的仓库代码,克隆到本地。
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 文件。
找到具体出问题的地方,完成修改。
测试修复
修改完成后,还需要进行测试。
# 安装依赖
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 origin
与 git push --set-upstream origin
的区别。
相同点:
- 它们都会将本地的
fix-tinypng-config-bug
分支推送到远程仓库origin
。 - 如果远程没有这个分支,它们都会创建一个新的远程分支。
不同点:
git push origin fix-tinypng-config-bug
,只是一次性推送当前分支到远程。不会建立本地分支与远程分支的追踪关系(tracking)。以后你执行 git push
或 git pull
时,Git 可能不知道你要操作哪个远程分支,可能会提示你指定。
而 git push --set-upstream origin fix-tinypng-config-bug
在推送的同时会建立本地分支与远程分支的追踪关系。以后你可以直接使用:git push
和 git pull
,而不需要每次都指定远程和分支名。
创建 Pull Request
回到你 Fork 的仓库页面,如果推送成功,则会显示新分支和修改的合并提交信息,点击 Compare & pull request
按钮就可以填写 PR 标题和描述。
在描述中也可以引用之前创建的 Issue。
最后点击下方的 Create pull request
,即可完成一次 PR 的提交。
接下来,项目维护者会审核你的 PR,可能会要求一些修改或直接合并。
如果项目有贡献指南,则需要检查项目是否有
CONTRIBUTING.md
文件,了解项目的贡献规范。确保你的代码符合项目的编码风格,PR 符合规范。
删除分支
在 PR 被合并后,可以在原先提交 PR 页面中,点击 Delete branch,来删除分支。
如果该本地项目后续还需要进行其他修改的话,则需要再删除本地分支。
# 删除本地分支
git branch -d fix-tinypng-config-bug
在项目更新后,需要再 git pull
新代码,在此基础上,创建新分支 git checkout -b
进行另外的代码编写。