如何在 Github 上规范的提交 PR(图文详解)


最近在看一个 Github 项目 (https://github.com/man-shuo/manshuo-bot),在里面发现了一个小问题。遵循 GitHub 官方推荐的基本协作流程,给项目提交了 issue 和 PR (Pull Request)。过了两天,作者给了我反馈,并合并 (merge) 了我的提交请求 (PR)。借这个机会,根据 GitHub Docs 提供的开源项目协作流程,并结合本次实践经历,总结了一下通过 GitHub 进行项目协作的完整流程。这个流程不只适用于个人提交开源贡献,也适用于公司或团队内部之间的 Git 项目协作。


GitHub 官方项目协作流程整理

1. 找项目 (Finding projects)

这个很简单,确定目标项目,这里是:漫朔的个人仓库

友情提示:
  1. 做开源贡献之前,可以先看看 issue 和 PR 中,有没有人已经提出过与你观点相同和相近的反馈意见或修改提交。注意作者是怎么回复的,避免浪费自己时间。

如果是一些小问题,而且自己时间有限,可以先提一个 issue,提醒作者本人或者其他人解决,如果没有人回应,再尝试自己提交 PR。

2. 派生一个存储库 (Forking a repository)

进入 https://github.com/man-shuo/manshuo-bot 项目主页,点击 Fork 按钮,创建一个新的派生项目(Create a new fork)

再点击 Create fork 按钮,创建派生项目到自己的工作区。

3. 克隆一个派生 (Cloning a fork)

进入自己的 Github 工作区,将派生项目克隆到本地(或者远端服务器

# 克隆项目到本地(注意是派生项目的链接,不是原始项目)
git clone git@github.com:man-shuo/manshuo-bot.git

4. 创建一个分支 (Creating a branch)

# 创建并切换到本地新分支,分支的命名尽量简洁,并与解决的问题相关
git checkout -b delete-unused-link

5. 做出修改 (Make changes)

删除一行无用的代码,import Link from 'next/link'

这里仅作示例

6. 提交修改 (Pushing changes)

这步需要注意一下,有些项目更新的会比较频繁。当你做出修改和提交 PR 之前,可能有作者新的提交和 PR 被合并到原项目。如果有这种情况发生,在你工作区的派生项目会显示原项目有更新。例如:

点击 Update branch 之后,将原项目更新同步到派生项目。再进入本地项目文件夹

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

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

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

查看更新后的内容是否和本地修改有冲突,有冲突就解决冲突,完成后就可以提交修改了

# 当前文件夹位置 
# 保存本地修改并将工作目录还原到当前HEAD提交状态
git commit -am 'Delete unused Link declaration'  

# 推到派生项目远端仓库,因为之前项目分支是在本地创建的,需要带上 '--set-upstream'
git push --set-upstream origin delete-unused-link

7. 创建合并请求 (Create a pull request)

回到线上派生项目的工作区,会看到新分支和修改的合并提交信息,点击Compare & pull request
选择你想并入的原项目分支,标题和描述信息。如果有对应的 issue,就通过键入 # 添加(Github 会自动展示 issues 列表)
点击 Create pull request ,就行了。不出意外,你提的 PR 就应该躺在下面了

8. 发表评论 (Address review comments)

这部分是原项目作者需要遵循的规范

9. 合并你的请求 (Merge your pull request)

这是原项目作者要做的,已经展示过了,不再赘述。

10. 删除你的分支 (Delete your branch)

最后一步不是必须的,只是保持一个规范的开源协作习惯,减少意外提交错误项目分支的情况发生。

来到原项目 Github 主页,找到之前已经合并的提交请求(在关闭的 PR 列表中),点击 Delete branch

# 删除本地分支
git branch -d delete-unused-link
注意:下次在已有的派生项目创建新分支前,要先将原项目的更新同步到派生项目,并将更新后的派生项目拉到(git pull)本地,再重新建立分支(git checkout -b new-branch-name ),再重复上述过程即可。

Github 官网对协作流程方面写很清楚,但阐述逻辑上有点混乱,而且没有中文版。有人可能会问,GitHub Docs 提供多语言访问,而且是开源的,为什么中文版有些部分没有翻译完整?详见https://github.com/github/docs/blob/main/contributing/types-of-contributions.md#earth_asia-translations 如下:

所以,GitHub Docs 其他语言的官方翻译会滞后于英文版,因为其他语言版本不接受内容贡献(这是 Github 官方在准确度和效率之间做的一个平衡)。如果 GitHub Docs 中没有提供符合你阅读习惯的语言版本,只能发信催 Github 官方尽快提供相关语言版本。实在不行,用 ChatGPT 帮忙翻译一下。

避坑提醒: 1. 给 GitHub Docs 提交内容翻译 PR 通常是不会通过的。这里官方说的很清楚了,不接受翻译内容贡献。 2. 如果发现英文原文内容有问题(语法,语义,词法),这个是可以提交修改意见 (Issue) 和合并请求 (Pull Request) 的(其他语言的版本也都是通过英文版本翻译过来的)。但也要基于原文内容修改,自己独立创作的内容合并请求很难被 Github 官方通过。

下面是参考的相关 Github 官方文档:

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 如何在 Github 上规范的提交 PR(图文详解)


这是我们的