【问题标题】:How do you attach a new pull request to an existing issue on github?您如何将新的拉取请求附加到 github 上的现有问题?
【发布时间】:2011-05-30 13:20:40
【问题描述】:

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

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

【问题讨论】:

  • 我相信我的回答表达了您想要的功能(“将拉取请求附加到现有问题”)可能还没有的事实。
  • 确实如此(事实上,this tweet 证实了这一点),但这也让我意识到我的问题本可以更清楚。
  • 我希望该功能在 github 优先级列表中排名靠前,因为那里的代码会喜欢它!
  • 正确的答案应该改为 masukomi 的,现在“修复 #1”方法可用。无需通过 API。
  • 我仍然找不到将拉取请求附加到现有问题的方法。我错过了什么吗?此线程中的答案似乎表明确实存在此功能,但我找不到它(它总是会产生新问题)。

标签: git github issue-tracking pull pull-request


【解决方案1】:

您现在(2020 年 2 月)可以在 服务器 端 (github. com)

见“View and link issues and pull requests from the sidebar

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

Documentation:

还有一个具有该功能的search API

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

【讨论】:

    【解决方案2】:

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

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

    这会创建一个拉取请求:

    • 在项目faraday 中询问technoweenie (https://api.github.com/repos/technoweenie/法拉第 em>/拉)
    • smparkes'fork 中的synchrony 分支拉取(“head”:“smparkes同步 ")
    • technoweenie 的分支中的master 分支(“base”:“master”)
    • 并将拉取请求附加到问题 15(“问题”:15
    • 与拉取请求作者 smparkes (--user "smparkes")
    • 系统将提示您输入 GitHub 密码

    【讨论】:

    • 我从该链接复制了一些示例代码。希望您不要介意,如果我翻译有误,请告诉我!
    • 你还需要认证,在上面的命令中加入:-u "login:password"
    • 我想补充一点,这个方法仍然有效,但是如果 GitHub 已经从问题中隐式提取了它,它可能会在讨论页面上列出两次提交的副作用#在其消息中(example)。不过,提交只在官方拉取请求中通过一次。
    • 这可以更新到 v3 API 吗? GitHub 刚刚关闭了 v2 API。
    • @rsanchezsaez 正如我在my answer 中所说,将--user "smparkes:password" 更改为--user "smparkes" 以交互方式提示您输入密码。
    【解决方案3】:

    如果您启用了 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 转换为拉取请求。

    【讨论】:

      【解决方案4】:

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

      $> git hub pull attach 123

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

      【讨论】:

        【解决方案5】:

        “枢纽”项目可以做到这一点:

        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
        

        【讨论】:

        • brew install hub 用自制软件安装
        • 这对我不起作用。说创建拉取请求时出错:无法处理的实体(HTTP 422)
        • @Rubycut 我遇到了同样的问题。相反,我做了hub pull-request URL_TO_ISSUE,然后它对我有用。我想知道-i ISSUE_NUMBER 是否仅在问题在同一个存储库中时才有效(即,不是分叉)
        • 要扩展@MichaelMior的答案,一个完整的例子是:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
        • 请注意,这只适用于您创建的问题:github.com/defunkt/hub/issues/189#issuecomment-6353354
        【解决方案6】:

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

        只需使用supported keywords 中的任何一个在您的提交消息中引用问题:

        • 关闭
        • 关闭
        • 关闭
        • 修复
        • 修复
        • 已修复
        • 解决
        • 解决
        • 已解决

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

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

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

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

        【讨论】:

        • "强烈建议您将任何将成为拉取请求的一部分的内容提交到特定于该问题的单独分支,因为该分支上的未来提交将附加到拉取请求中" --很好的一点。这发生在我身上一次,非常令人惊讶。
        • 不幸的是,这并不能解决将问题转化为拉取请求的问题。问题中的任何讨论都不会转移到拉取请求中……这对于几个用例来说是不幸的。我希望 Github 能够对 pull-reqs 在 repo 设置中的工作方式进行一些精细的控制。
        • @masukomi 项目维护者更容易解决拉取请求——他们可以通过单击按钮接受和合并更改。要在不使用拉取请求的情况下拉取 fork 中的更改,您必须将 fork 添加为远程,获取它们的更改,然后自己合并它们。
        • 我认为你错过了我的观点,Rory。如果您创建一个拉取请求并在问题中提及它(如我建议的那样),那么两者是连接的,您仍然可以单击一个按钮来获取更改。
        • 当拉取请求持续进行时,这无济于事。我们的工作流程是为想法创建问题,然后在我们开始处理这些想法后从功能分支中提取请求。使用拉取请求中的提交来关闭问题意味着我们丢失了先前包含的问题的讨论,这通常包括散列问题所涉及的任何功能/修复/重构。真正需要的是一种在问题工作开始后直接将问题转化为拉取请求的方法。
        【解决方案7】:

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

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

        编辑:2013 年 10 月 5 日

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

        $ gub start 123
        

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

        $ gub finish
        

        瞧!

        注意:我是Gub gem的作者。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 是的,2FA 阻止了这里的许多答案。就我而言,我创建了一个个人访问令牌并使用它而不是我的密码,这很有效。
          【解决方案9】:

          This other answer 解释了如何使用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。后来,你发现没有其他人做出你提议的改变,你也有时间自己做。你fork faraday to your own account,然后编写你的更改并将它们推送到名为synchrony 的分支下的fork。您认为 technoweenie 应该将这些更改拉到他的 repo 的 master 分支。在这种情况下,您可以编写以下命令将之前的问题转换为拉取请求:

          $ 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
          

          现在Issue #15 是一个拉取请求。

          【讨论】:

            【解决方案10】:

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

            非常简单有效!

            资源:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-09
              • 2014-04-20
              • 2014-11-22
              • 2015-02-16
              • 1970-01-01
              相关资源
              最近更新 更多