416

我不确定,但我对创建一个带有“问题 4”或标题中的内容的 github 拉取请求有一个模糊的记忆,它会自动将自己附加到我提交的项目中的问题 4。我最近又试了一次,但没有用——它只是创建了一个全新的问题。我在新的拉取请求页面上没有看到任何选项,例如“附加到问题”,也没有在问题页面上看到“为此问题打开新的拉取请求”。有没有办法做到这一点,以帮助项目所有者保持他们的问题页面清洁并避免重复?

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

4

10 回答 10

250

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

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

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

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

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

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

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

于 2011-08-25T12:02:16.060 回答
246

枢纽项目可以做到这一点。

在要从以下位置发送拉取请求的存储库和分支中:

$ 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
于 2011-10-20T20:39:29.037 回答
144

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

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

这会创建一个拉取请求:

  • technoweenie项目询问(faradayhttps://api.github.com/repos/technoweenie/faraday/pulls
  • 从' fork中的synchrony分支中拉出(“head”:“ smparkes : synchrony ”)smparkes
  • 到's fork 中的master分支technoweenie("base": " master ")
  • 并将拉取请求附加到问题 15(“问题”:15
  • 与拉取请求作者smparkes(--user“ smparkes ”)
  • 系统将提示您输入 GitHub 密码
于 2010-12-25T03:20:32.877 回答
17

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

它非常简单有效!

在此处输入图像描述

资源:

于 2013-06-30T08:14:51.667 回答
10

这个其他答案解释了如何使用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的 repo faraday,想到了一些应该改变的东西,并为此在那个 repo 上做了一个 Issue,Issue # 15。后来,你发现没有其他人做出你提议的改变,你也有时间自己做。您将faraday分叉到您自己的帐户,然后编写您的更改并将它们推送到您的分支下名为synchrony的分支下。您认为technoweenie应该将这些更改拉到master branch of his repo. This is the command you would write to convert your previous Issue into a Pull Request for this situation:

$ 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

Now Issue #15 is a Pull Request.

于 2012-08-15T18:37:58.450 回答
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
于 2013-09-15T17:14:17.397 回答
3

您现在(2020 年 2 月)可以在服务器端(github.com)执行此操作,而不是在客户端执行此操作(hubChristian Oudard的 回答)

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

您现在可以通过各自页面中的侧边栏链接问题和拉取请求。一旦链接的拉取请求被合并,此处建立的连接将自动关闭问题。

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

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

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

于 2020-02-04T22:31:31.300 回答
1

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

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

编辑:2013 年 10 月 5 日

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

$ gub start 123

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

$ gub finish

瞧!

注意:我是 Gub gem 的作者。

于 2013-10-01T22:55:56.950 回答
0

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

$> git hub pull attach 123

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

于 2015-02-26T13:48:37.910 回答
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 转换为拉取请求。

于 2018-03-31T17:14:45.233 回答