I'm not sure, but I have a vague memory of creating a github pull request with "Issue 4" or something in the title, and it automatically attached itself to Issue 4 in the project that I was submitting it to. I tried it again recently and it didn't work -- it just created a brand new issue instead. I don't see any options like "Attach to issue" on the new pull request page, nor "Open a new pull request for this issue" on the issue page. Is there any way to do this, to help project owners keep their Issues page clean and avoid duplication?

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


你可以用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 project的technoweenie (https://api.github.com/repos/technoweenie/faraday/pulls) 从smparkes的fork中的同步分支中提取("head": "smparkes:synchrony") 到technoweenie's fork中的master分支("base": "master") 并将拉请求附加到issue 15(“issue”:15) 与拉请求作者smparkes(——user "smparkes") 你会被提示输入你的GitHub密码


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

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

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

例如:"this commit fixes #116"

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

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

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


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

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

$ 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

这个答案解释了如何使用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密码。

解释的例子

You have logged into GitHub with username smparkes and password hunter2. You saw technoweenie’s repo faraday, thought of something that should be changed, and made an Issue on that repo for it, Issue #15. Later, you find that nobody else has made your proposed change, and you also have some time to do it yourself. You fork faraday to your own account, then write your changes and push them to your fork under a branch named synchrony. You think technoweenie should pull those changes to the 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

现在第15个问题是一个Pull Request。


另一个可能的工具是Issue2Pr网站,它可以把你的问题变成Pull Requests。

这非常简单有效!

资源:

公告 GitHub库


如果你在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工具,你可以这样做:

$> git枢纽拉附加123

这将把问题#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转换为一个拉请求。


你现在(2020年2月)可以在服务器端(github.com)做,而不是在客户端(使用hub,如Christian Oudard的回答)做。

参见“查看和链接问题,并从侧栏提取请求”

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

文档:

有一个带有这个功能的搜索API。

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


Ismoh在评论中提到了讨论:

GitHub Action:拉请求“开发”对象/数据,又名链接问题

Ismosh的Marketplace操作用于查找拉请求的链接问题。

    - name: Find linked issues
      id: find-linked-issues
      uses: Ismoh-Games/find-linked-issues@v0.0.1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        repository: ${{ github.repository }} # optional
        pull-request-number: ${{ github.event.pull_request.number }} # optional
        copy-issues-labels: true # optional