如何将新的拉请求附加到github上的现有问题?

我不确定,但我有一个模糊的记忆,在标题中创建了一个github拉请求,标题中有“Issue 4”或其他内容,它自动附加到我提交的项目中的Issue 4。我最近又试了一次,没有效果——它只是产生了一个全新的问题。我没有在新的拉请求页面上看到“附加到issue”这样的选项,也没有在issue页面上看到“为这个issue打开一个新的拉请求”。有没有办法做到这一点,以帮助项目所有者保持他们的问题页面干净,避免重复?

编辑:澄清一下,我知道创建一个拉请求总是会产生一个问题。相反,我想将拉请求附加到现有的问题。

103832 次浏览

你可以用Pull Request API从一个已经存在的问题创建一个Pull Request:

$ curl --user "smparkes" \
--request POST \
--data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
https://api.github.com/repos/technoweenie/faraday/pulls

这将创建一个拉请求:

  • 在项目faraday (https://api.github.com/repos/< em > technoweenie < / em >/< em >法拉第< / em >/pulls)询问technoweenie
  • smparkes' fork中的synchrony分支中提取("head": "< em > smparkes < / em >:< em >同步< / em >")
  • technoweenie的分支中的master分支("base": "< em > < / em >大师")
  • 并将拉请求附加到issue 15 ("issue": < em > < / em > 15)
  • 使用拉请求作者smparkes(——user "< em > smparkes < / em >")
  • 你会被提示输入你的GitHub密码

向现有的上游问题添加一个拉请求很容易假设你使用正常的github方法分叉

在你的提交消息中使用任何支持关键字引用问题:

  • 关闭
  • 关闭
  • 关闭
  • 修复
  • 修复
  • 固定
  • 解决
  • 解决了
  • 解决

例如:"this commit fixes #116"

引用该问题的文本不需要出现在提交的主题行中。

推送你的提交到你的github回购和拉请求将自动追加到问题。

注意:虽然这不是必需的,但强烈建议您将任何作为拉取请求一部分的内容提交到特定于该问题的单独分支,因为在该分支上的未来提交将被追加到拉取请求(由github自动执行)。所以,如果你没有创建一个独立的分支,把它留在master上,然后继续开发,那么所有你对master不相关的提交都会被追加到你的pull request中。

中心项目可以做到这一点。

在存储库和分支中,你想发送一个拉请求:

$ hub pull-request -i 4

这使用了GitHub API,并将当前分支的拉请求附加到现有问题4上。


要扩展@MichaelMior的答案,一个完整的例子是:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE

另一个答案解释了如何使用旋度 (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密码。

解释的例子

已使用用户名< em > smparkes < / em >和密码hunter2登录GitHub。你看到了< em > technoweenie < / em >的回购< em >法拉第< / em >,想到了一些应该改变的东西,并对它的回购问题15 # < em > < / em >做了一个问题。稍后,您发现没有其他人对您提出的更改进行修改,而您自己也有时间进行修改。你Fork faraday到您自己的账户,然后写你的修改,并把它们推到名为< em >同步< / em >的分支下。你认为technoweenie应该将这些更改拉到他的repo的< em > < / em >大师分支。这是你在这种情况下将你之前的问题转换为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

现在问题15 # < em > < / em >是一个拉请求。

另一个可能的工具是Issue2Pr website,它将你的问题转换为Pull Requests。

这非常简单有效!

enter image description here

资源:

如果你在github中使用2-factor-auth,你需要在请求中提供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

你也可以使用Gub为你的问题提交拉取请求。

它还可以帮助您使用合适的fork/pull-request样式。

编辑:10/5/2013

为了让Gub提交issue #123的pull-request,你需要运行以下命令:

$ gub start 123

这将创建一个新的分支issue-123。一旦你解决了这个问题,执行:

$ gub finish

瞧!

注:我是Gub gem的作者。

使用git-hub工具,你可以这样做:

< p > <代码>比美元;Git枢纽拉连接123 < /代码> < / p >

这将把问题#123转换为拉请求#123,从而将关于该问题的所有讨论保持在一个位置。

如果你启用了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转换为一个拉请求。

而不是在客户端(使用hub,如在基督教Oudard 回答),你现在(2020年2月)可以在服务器端做这件事(github.com)

参见“从侧边栏查看和链接问题并拉出请求

您现在可以通过各自页面中的侧边栏链接问题和提取请求。在这里建立的连接将在合并链接的pull请求后自动关闭问题。

文档: https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

并且有一个具有该特性的搜索API

找到存储库中所有带有linked:pr搜索限定符的关闭拉请求引用的开放问题 类似地,找到存储库中缺少-linked:issue支持问题的所有拉请求