我不确定,但我对于创建带有“问题4”或标题内容的github拉取请求有一个模糊的记忆,并且它自动附加到我提交给它的项目中的第4版。我最近再次尝试过它并没有用 - 它只是创造了一个全新的问题。我没有在新的请求页面上看到任何选项,例如“附加到问题”,也没有在问题页面上看到“为此问题打开新的拉取请求”。有没有办法做到这一点,以帮助项目所有者保持他们的问题页面清洁,避免重复?
修改:为了澄清,我知道创建拉取请求始终会产生新问题。我想将拉取请求附加到现有的问题。
答案 0 :(得分:242)
“hub”项目可以做到这一点:
https://github.com/defunkt/hub
在您要从以下位置发送拉取请求的存储库和分支中:
$ hub pull-request -i 4
这使用GitHub API,并将当前分支的拉取请求附加到现有的第4期。
编辑: @atomicules的评论:要扩展@MichaelMior的答案,完整的例子是:
$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
答案 1 :(得分:219)
如果您使用普通的github方法分叉,那么很容易向现有的上游问题添加拉取请求。
中的任何一个,只需在提交消息中引用该问题例如:“此提交修复#116”
引用该问题的文本不需要出现在提交的主题行中。
将您的提交推送到您的github仓库,拉取请求将自动附加到该问题。
注意:虽然不是必需的,但强烈建议您将针对拉出请求的任何内容提交到特定于该问题的单独分支,因为该分支上的未来提交将附加到拉取请求(自动由github)。因此,如果您没有创建一个单独的分支,将其保留在master上,然后继续开发,那么所有与master无关的提交都将附加到您的pull请求中。
答案 2 :(得分:143)
您可以使用Pull Request API:
从现有问题创建拉取请求$ curl --user "smparkes" \
--request POST \
--data '{"issue": "15", "head": "smparkes:synchrony", "base": "master"}' \
https://api.github.com/repos/technoweenie/faraday/pulls
这会创建一个拉取请求:
technoweenie
询问faraday
(https://api.github.com/repos/technoweenie/法拉第 强> /拉)synchrony
'叉中的smparkes
分支拉出(“head”:“ smparkes : synchrony 强>“)master
分叉中的technoweenie
分支(“base”:“ master ”)smparkes
( - 用户“ smparkes ”)答案 3 :(得分:17)
另一个可能的工具是 Issue2Pr website ,它可以将您的问题转变为Pull Requests。
这非常简单有效!
<强>资源:强>
答案 4 :(得分:10)
This other answer说明如何使用cURL(curl
)通过GitHub API从问题中创建拉取请求。以下是使用HTTPie(http
)执行此操作的方法,该命令可生成更易于阅读且更易于编辑的命令:
$ http --auth "<your-GitHub-username>" \
POST \
https://api.github.com/repos/<issue-repo-owner>/<issue-repo-name>/pulls \
issue=<issue-number> head=<your-GitHub-username>:<your-fork-branch-name> base=<issue-repo-branch-name>
然后在出现提示时键入您的GitHub密码。
您已使用用户名smparkes和密码 hunter2 登录GitHub。您看到了technoweenie的回复faraday,想到了应该更改的内容,并为该回复制作了一个问题Issue #15。之后,您发现没有其他人提出您的建议更改,您也有时间自己做。您fork faraday to your own account,然后编写更改并将其推送到名为synchrony的分支下的分支。您认为 technoweenie 应该将这些更改提取到其回购的master分支。这是您要编写的命令,用于将您之前的问题转换为针对此情况的Pull Request:
$ http --auth "smparkes" \
POST \
https://api.github.com/repos/technoweenie/faraday/pulls \
issue=15 head=smparkes:synchrony base=master
http: password for smparkes@api.github.com: hunter2
现在Issue #15是一个拉取请求。
答案 5 :(得分:3)
如果你使用2-factor-auth和github,你需要在请求中提供authtoken作为标题:
curl -u "<your_username>:<your_pw>" \
--header 'X-GitHub-OTP: <your_authtoken>' \
--request POST \
--data '{"issue":"<issue_nr>", "head":"<your_username>:<your_forks_branchname>", "base":"<upstream_branch>"}' \
https://api.github.com/repos/<upstream_user>/<upstream_repo>/pulls
答案 6 :(得分:2)
您现在(2020年2月)可以在服务器上做到这一点,而不是在客户端(像hub
Christian Oudard那样,在answer上做到这一点)侧(github.com)
请参阅“ View and link issues and pull requests from the sidebar ”
您现在可以在相应页面的侧边栏中链接问题和请求。链接的合并请求合并后,此处建立的连接将自动关闭问题。
有一个search API具有该功能。
使用
linked:pr
搜索限定词查找存储库中所有具有未完成的拉取请求引用的未解决问题。
同样,在存储库中找到所有缺少-linked:issue
支持问题的拉取请求。
答案 7 :(得分:1)
您也可以使用Gub为您的问题提交拉取请求。
它还可以帮助您使用正确的fork / pull-request风格。
编辑:2013年10月5日
要让Gub为问题#123提交pull-request,您需要运行以下命令:
$ gub start 123
这将创建一个新的分支问题-123。完成该问题后,请执行:
$ gub finish
瞧!
注意:我是Gub gem的作者。
答案 8 :(得分:0)
答案 9 :(得分:0)
如果您启用了2FA,则可以使用HTTPie传递令牌:
http POST \
https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
issue=2 head=issue_2 base=master
"Authorization:token PUTAUTHTOKENHERE"
这将使用分支issue_2
将问题#2转换为拉取请求。