关于git:如何在github上附加新的pull请求到现有问题?

How do you attach a new pull request to an existing issue on github?

我不确定,但我有一个模糊的记忆创建一个"问题4"或标题中的Github拉请求,它自动附加到我提交它的项目中的问题4。我最近又试了一次,但没用——它只是创造了一个全新的问题。我在新的请求页面上看不到任何选项,如"附加到问题",在问题页面上也看不到"打开此问题的新请求"。有没有什么方法可以做到这一点,以帮助项目所有者保持他们的问题页面干净,避免重复?

编辑:为了澄清,我知道创建拉请求总是会创建一个新问题。我想把请求附加到现有问题上。


"中心"项目可以做到这一点:

https://github.com/defunkt/hub网站

在要从中发送请求的存储库和分支中:

1
$ hub pull-request -i 4

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

edit:comment by@atomicules:要扩展@michaelmior的答案,完整示例如下:

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


假设您使用普通的github方法分叉,那么向现有的上游问题添加拉请求很容易。

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

  • 关闭
  • 关闭
  • 关闭
  • 修理
  • 修正
  • 固定的
  • 决定
  • 解决
  • 断然的

例如:"此提交修复程序116"

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

将您的提交推送到Github回购,请求将自动附加到问题中。

注意:虽然不是必需的,但强烈建议您向特定于该问题的单独分支提交请求中的任何内容,因为该分支的将来提交将附加到请求中(由Github自动执行)。所以,如果您没有创建单独的分支,将其留在master上,然后继续开发,那么您对master的所有不相关的提交都将被附加到pull请求中。


您可以使用拉请求API从现有问题创建拉请求:

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

这将创建拉请求:

  • 询问technoweenie项目(https://api.github.com/repos/technoweenie/faraday/draws)
  • smparkes叉中的synchrony分支中拔出("head":"smparkes:synchronomy")。
  • technoweenie叉中的master分支("base":"master")。
  • 并将请求附加到第15版("发行":"15")。
  • 使用拉请求作者smparkes(--用户"smparkes")。
  • 系统将提示您输入GitHub密码


另一个可能的工具是issue2pr网站,它将您的问题转化为拉请求。

它非常简单有效!

enter image description here

资源:

  • 公告
  • Github存储库

另一个答案解释了如何使用curl(curl通过github API从一个问题创建一个pull请求。下面介绍如何使用httpie(http)来执行此操作,它可以生成一个易于阅读和编辑的命令:

1
2
3
4
$ 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和密码猎人2登录GitHub。你看到Technoweenie的repo faraday,想到了一些应该改变的事情,并在该repo上提出了一个问题,问题15。后来,你发现没有其他人做出你提议的改变,你也有时间自己去做。你将法拉第分叉到你自己的账户,然后写下你的更改,并将它们推到你的分叉下一个名为"同步"的分支下。你认为Technoweenie应该把这些变化转移到他的回购协议的主分支。这是您将编写的命令,用于将以前的问题转换为针对此情况的请求:

1
2
3
4
$ http --auth"smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
1
http: password for [email protected]: hunter2

现在,问题15是一个拉请求。


如果在Github中使用2因子身份验证,则需要在请求中提供authtoken作为头:

1
2
3
4
5
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提交您的问题的请求。

它还帮助您使用适当的分叉/拉请求样式。

编辑:2013年10月5日

要让Gub提交Pull Request for Issue 123,您需要运行以下程序:

1
$ gub start 123

这将创建一个新的分支问题-123。完成问题处理后,执行:

1
$ gub finish

哇!

注:我是Gub Gem的作者。


如果启用了2FA,则可以将令牌与httpie一起使用:

1
2
3
4
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转换为拉取请求。


使用git-hub工具,您可以使用以下方法完成此操作:

埃多克斯1〔9〕

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