如何在github上为新问题附加新的拉取请求?

Mat*_*rog 401 git pull github issue-tracking pull-request

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

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

Chr*_*ard 244

"hub"项目可以做到这一点:

https://github.com/defunkt/hub

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

$ hub pull-request -i 4
Run Code Online (Sandbox Code Playgroud)

这使用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
Run Code Online (Sandbox Code Playgroud)

  • 要扩展@MichaelMior的答案,一个完整的例子是:`hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE` (30认同)
  • `brew install hub`用自制软件安装 (11认同)
  • 这对我不起作用.说错误创建拉取请求:不可处理的实体(HTTP 422) (11认同)
  • @Rubycut我遇到了同样的问题.相反,我做了'hub pull-request URL_TO_ISSUE`,然后它对我有用.我想知道`-i ISSUE_NUMBER`是否仅在问题存在于同一个存储库(即不是fork)时才有效 (11认同)
  • 请注意,这仅适用于您创建的问题:https://github.com/defunkt/hub/issues/189#issuecomment-6353354 (4认同)
  • 我分了一个回购.我在上游回购中创建了一个问题.我改变了我的分叉回购.我试图将我的更改添加到我创建的问题中.`-i xx`对我不起作用.@MichaelMior的`URL_TO_ISSUE`有效. (3认同)
  • `警告:拉取请求转换的问题已被弃用,将来可能无效.实际上,它不起作用. (3认同)

mas*_*omi 231

假设您使用普通的github方法进行分叉,则可以轻松地向现有上游问题添加拉取请求.

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

  • 关闭
  • 关闭
  • 固定
  • 修复
  • 固定
  • 解决
  • 做出决议
  • 解决

例如:"此提交修复了#116"

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

将您的提交推送到您的github仓库,拉取请求将自动附加到该问题.

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

  • "强烈建议您将拉出请求的一部分提交给特定于该问题的单独分支,因为该分支上的未来提交将附加到拉取请求" - 非常好的一点.这件事发生在我身上,这是非常令人惊讶的. (31认同)
  • 遗憾的是,这并没有解决将问题转化为拉取请求的问题.该问题中的任何讨论都没有转移到拉取请求......这对于几个用例来说是不幸的.我希望Github能够精确控制pull-req在repo设置中的工作方式. (9认同)
  • 我想你错过了我的观点Rory.如果您创建一个拉取请求并在问题中提及它(如我所建议的那样),那么两者是相连的,您仍然可以单击按钮来获取更改. (2认同)
  • 当拉取请求正在进行时,这无济于事。我们的工作流程是为想法创建问题,然后在我们开始处理这些想法时从功能分支中提取请求。在拉取请求中使用提交来关闭问题意味着我们将失去先前包含的问题的讨论,该讨论通常包括对问题所解决的任何功能/修复/重构进行散列。真正需要的是一旦开始处理问题,便可以将问题直接提出请求的方法。 (2认同)

小智 144

您可以使用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
Run Code Online (Sandbox Code Playgroud)

这会创建一个拉取请求:

  • technoweenie在项目faraday(https://api.github.com/repos/ technoweenie/法拉第 /拉)
  • 从'fork("head":" smparkes:synchrony ")中的synchrony分支中拉出来smparkes
  • master在分支technoweenie的叉('基地’:' ’)
  • 并将拉取请求附加到问题15("问题":" 15 ")
  • 与pull request author smparkes(-- user " smparkes ")
  • 系统将提示您输入GitHub密码

  • 您还需要身份验证,将其添加到上面的命令:-u"login:password" (3认同)
  • 可以将其更新到v3 API吗?GitHub刚刚关闭了v2 API. (3认同)
  • 我只想补充一点,这个方法仍然有效,但是如果GitHub已经从它的消息中的问题#中隐式地选择了它,那么它可能会产生副作用,即在讨论页面上列出你的提交两次([例子]( https://github.com/ask/celery/pull/450)).但是,提交仅在官方拉取请求中通过一次. (2认同)

nul*_*ken 17

另一个可能的工具是Issue2Pr网站,它将您的问题转变为Pull Requests.

它非常简单有效!

在此输入图像描述

资源:


Ror*_*ane 10

另一个答案解释了如何使用cURL(curl)通过GitHub API从问题中创建Pull请求.以下是使用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>
Run Code Online (Sandbox Code Playgroud)

然后在出现提示时键入您的GitHub密码.

解释的例子

您已使用用户名smparkes和密码hunter2登录GitHub .你看到了technoweenie的回购法拉第,想到了应该改变的东西,并在那个回购中提出了问题,问题#15.之后,您发现没有其他人提出您的建议更改,您也有时间自己做.您法拉第到自己的帐户,然后再编写的变化和一个分支命名为下他们推到你的叉子同步.您认为technoweenie应该将这些更改提取到其回购的分支中.这是您要编写的命令,用于将您之前的问题转换为针对此情况的Pull请求:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
Run Code Online (Sandbox Code Playgroud)
http: password for smparkes@api.github.com: hunter2
Run Code Online (Sandbox Code Playgroud)

现在问题#15是拉取请求.


Von*_*onC 5

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

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

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

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

并且有一个具有该功能的搜索 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
Run Code Online (Sandbox Code Playgroud)