有时我们需要对社区开发者向我们的项目提交的 pull request 进行一些修改,例如一些配置文件以及资源文件的补充等。这种情况下我们可以直接回复 request 提出修改的要求,但除此之外,我们也可以使用一种更简单的方案:直接向 pull request 提交 commit。

分支路线图

在下文的实现例子中,仓库维护者 (我) 的用户名是 amzrk2,提交 request 的开发者用户名是 Hyask。示例的 pull request 修改了文件,并且直接从对方的 master 分支推送到本仓库 hugo-theme-fujimaster 分支。

pull request 预览

以下操作基于本地已经有 clone 完成的远程仓库文件的假设,从上面的图可以看出,GitHub 提示我们可以直接提交内容到 request 发起者的仓库,以下是全过程的步骤。

添加远程仓库

首先需要添加 pull request 提出者的仓库至本地,作为另一个远程仓库:

git remote add Hyask git@github.com:Hyask/hugo-theme-fuji.git

添加完成后尝试使用 git remote -v,即可看到其他远程仓库:

添加新的远程仓库预览

同步仓库并切换分支

添加完成后,同步新的远程仓库内容:

git fetch Hyask

同步完成之后,需要切换到对方发起 pull request 的来源分支,也就是我们希望提交新 commit 的分支:

git checkout -b Hyask-master Hyask/master

同步仓库并切换分支预览

这样就完成了切换,并且本地的 Hyask-master 分支对应了对方发起 pull request 的 Hyask/master 分支。

修改文件并提交

切换到 Hyask-master 分支后就可以进行文件的修改了,修改完成后提交 commit 的流程均与平时一致:

git commit -m "fix: something"

提交 commit 预览

确定修改已经完成并提交了 commit 之后,推送到对方的仓库即可。注意这里的推送目标分支,git 可能会提示分支名不一致,按提示推送即可:

git push Hyask HEAD:master

推送预览

推送完成之后,应该就已经能在 GitHub 对应 pull request 的页面上看到刚刚做出的修改了。

看到刚刚做出的修改预览

可能出现的问题

如果在推送至对方仓库时,提示 remote rejected,原因是 permission denied,则可能是因为对方并没有在他的 pull request 页面上勾选 “Allow edits from maintainers” 的选项。在这种情况下就只能提出修改意见,或是提出能否开启该选项的请求了。