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


409

我不确定,但是我对创建带有“问题4”或标题中的内容的github pull请求记忆犹豫,并且它自动将其自身附加到我提交该项目的项目4中。我最近再次尝试过,但没有成功-而是创造了一个全新的问题。我在新的请求请求页面上没有看到任何选项,例如“附加到发布”,在问题页面上没有看到“打开新的请求请求”。有什么方法可以帮助项目所有者保持“问题”页面的清洁度并避免重复?

编辑:澄清一下,我知道创建请求请求总是会创建一个问题。我想改为将拉取请求附加到现有问题。


1
我相信我的回答表达了一个事实,那就是您想要的功能(“将拉取请求附加到现有问题”)可能还不存在。
VonC 2010年

的确(确实得到了此推文的确认),但是这也让我意识到我的问题可能更清楚了。
MatrixFrog 2010年

我希望该功能在github优先级列表上很高,因为代码表明那里会喜欢它!
2011年

2
既然“ fixes#1”方法可用,正确的答案应该更改为增假。无需通过API。
爱德华·安德森

我仍然找不到将拉取请求附加到现有问题的方法。我错过了什么吗?该线程中的答案似乎表明确实存在此功能,但我找不到它(它总是会发出新问题)。
凯文·贾伯特

Answers:


245

“ 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

12
brew install hub安装自制软件
gcamp 2012年

11
这对我不起作用。说创建拉取请求时出错:无法处理的实体(HTTP 422)
Rubycut,2012年

11
@Rubycut我有同样的问题。相反,我做了hub pull-request URL_TO_ISSUE,然后它为我工作。我想知道-i ISSUE_NUMBER问题是否在同一个存储库中(即不是叉子)是否有效?
Michael Mior 2012年

30
要通过@MichaelMior答案拓展一个完整的例子是:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomicules

4
请注意,这仅适用于您创建的问题:github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach

237

假设您使用常规github方式进行分叉,则向现有的上游问题添加拉取请求很容易。

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

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

例如:“此提交修复了#116”

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

将您的提交推送到您的github仓库中,拉取请求将自动添加到问题中。

注意:虽然不是必需的,但强烈建议您将将拉请求中包含的任何内容提交给特定于该问题的单独分支,因为该分支上的将来提交将追加到拉请求中(由github自动完成) )。因此,如果您不进行单独的分支,将其留在master上,然后继续开发,那么所有与master无关的提交都将附加到您的pull request中。


31
“强烈建议您将将属于拉取请求的任何内容提交到特定于该问题的单独分支,因为将来对该分支的提交将追加到拉取请求中” –非常重要。这一次发生在我身上,这真是令人惊讶。
MatrixFrog 2011年

9
不幸的是,这不能解决将问题转换为请求请求的问题。在这个问题上进行的任何讨论都不会转移到拉取请求中……这在一些用例中是不幸的。我希望Github能够对回购设置中pull-req的工作方式进行一些细化的控制。
亚历克斯·沃特斯

1
@masukomi对于项目维护者来说,拉取请求更容易解决-他们可以通过单击按钮接受并合并更改。要在不使用拉取请求的情况下拉出分叉中的更改,您将必须将分叉添加为远程操作,获取其更改,然后自行合并。
罗里·奥肯

2
我想你错过了我的观点罗里。如果创建拉取请求并在问题中提到它(如我建议的那样),则两者已连接,您仍然可以单击按钮以获取更改。
masukomi 2012年

2
当拉取请求正在进行时,这无济于事。我们的工作流程是为想法创建问题,然后在我们开始处理这些想法时从功能分支中提取请求。在拉取请求中使用提交来关闭问题意味着我们将失去先前包含的问题的讨论,该讨论通常包括对问题所解决的功能/修复/重构进行哈希计算。真正需要的是一旦开始处理问题,便可以将问题直接提出请求的方法。
Daniel Bingham 2014年

144

您可以使用Pull Request API从现有的Issue中创建Pull Request

$ 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'叉(‘头’:‘ smparkes同步 ’)
  • master分支中technoweenie的分支(“ base”:“ master ”)
  • 并附加拉取请求以发出15(“ issue”:15
  • 与拉取请求作者smparkes(-用户“ smparkes ”)
  • 系统将提示您输入GitHub密码

1
我从该链接复制了一些示例代码。希望您不要介意,如果我翻译错误,请告诉我!
MatrixFrog 2010年

3
您还需要身份验证,将其添加到上面的命令中:-u“ login:password”
morgoth 2011年

2
我想补充一下,此方法仍然有效,但如果GitHub已从其消息中的问题#中隐式地将其提交(示例),则它可能会在讨论页面上两次列出您的提交,这可能会产生副作用。但是,提交仅在正式请求请求时通过一次。
格雷格·哈斯金斯

3
可以将其更新到v3 API吗?GitHub刚刚关闭了v2 API。
Michael Best

1
@rsanchezsaez正如我在回答中所说,更改--user "smparkes:password"--user "smparkes"以交互方式提示您输入密码。
罗里·奥肯


10

这个另一个答案说明了如何使用cURLcurl)通过GitHub API从Issue创建一个Pull Request 。这是使用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的回购法拉第,想到了应该更改的内容,并为此回购发布了一个问题,15期。后来,您发现没有其他人进行过建议的更改,并且您还有时间自己进行更改。您法拉第到自己的帐户,然后再编写的变化和一个分支命名为下他们推到你的叉子同步。您认为technoweenie应该将这些更改拉到回购的分支。这是您要在这种情况下将先前的Issue转换为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期是“拉取请求”。


3

如果您对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

1
是的,2FA阻止了此处的许多答案。就我而言,我创建了一个个人访问令牌并使用了它,而不是我的密码。
berto

1

您也可以使用Gub提交针对您的问题的请求请求。

它还可以帮助您使用适当的派生/请求样式。

编辑:10/5/2013

要使Gub提交问题#123的请求请求,您需要运行以下命令:

$ gub start 123

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

$ gub finish

瞧!

注意:我是Gub gem的作者。


1

您现在(2020年2月)可以在服务器上完成此操作,而不是在客户端(使用hub,如Christian Oudard answer中的那样)进行操作。端(github.com)那样)。

请参阅“ 查看和链接问题以及从侧边栏提取请求

现在,您可以通过相应页面中的侧边栏链接问题和请求。链接的合并请求合并后,此处建立的连接将自动关闭问题。

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

并且有一个具有该功能的搜索API

在存储库中找到所有带有linked:pr搜索限定符的拉取请求引用的未解决问题。
同样,在存储库中找到所有缺少支持问题的拉取请求-linked:issue


0

使用git-hub工具,您可以执行以下操作:

$> git hub pull attach 123

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


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转换为请求请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.