在最初创建提交的GitHub上查找拉取请求

oprakyz7  于 2022-11-20  发布在  Git
关注(0)|答案(8)|浏览(125)

拉取请求对于理解围绕对存储库所做的一个或一组更改的更大的思考是很好的。阅读拉取请求是快速“摸索”项目的一种很好的方式,因为你得到的不是对源代码的小的原子更改,而是更大的逻辑更改分组。这类似于将代码中的行组织成相关的“节”,使其更容易阅读。
我发现自己在看一个文件或一个提交,我想知道是否有一种方法可以回溯到最初创建它的Pull请求的提交。那个Pull请求最终会被合并,但合并提交不是必需的。

zengzsys

zengzsys1#

你可以直接进入GitHub,在搜索栏中输入SHA,确保你选择了左边的“问题”链接。

更新日期:2017年7月13日

通过GitHub的用户界面,现在有一个非常简单的方法来完成这个任务。如果你在用户界面的分支提交列表中看到一个提交,点击提交本身的链接。如果该提交有一个PR,并且没有直接添加到分支中,页面顶部的提交消息下方将直接显示一个指向PR的链接,其中列出了PR编号及其进入的分支。

如果你有提交SHA,没有其他东西,并且不想去挖掘它,只要把/commit/[commit SHA]添加到repo url,你就会看到提交页面,如果存在PR链接的话。

dba5bblo

dba5bblo2#

git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

中 的 每 一 个
如 有 必要 , 将 origin 改为 指向 GitHub 仓库 的 remote 的 名称 , 该 仓库 是 pull 请求 要 发送 到 的 仓库 。 对于 任何 给定 的 remote , 第 一 个 命令 只 需要 运行 一 次 , 第 二 个 命令 通常 在 获取 其他 更新 时 执行 。
这 将 导致 git 获取 关于 拉 取 请求 的 信息 以及 实际 的 分支 。 它们 将 显示 为 远程 跟踪 分支 , 如 origin/pull/123 。 完成 后 , 您 可以 使用 git describe--all--contains 选项 来 显示 第 一 个 引用 提交 的 分支 。
但是 , 如果 您 要 查找 的 提交 实际 上 是 拉 取 请求 中 提交 的 修改 版本 , 例如 更改 被 重新 基于 其他 工作 , 或者 执行 合并 的 人员 决定 进行 一些 更改 , 则 此 操作 将 不 起 作用 。

628mspwn

628mspwn3#

自 2014 年 10 月 13 日 起 , 这 一 点 应该 很 简单 :
例如 :
您 可以 看到 , 对于 文件 hakimel/reveal.js/plugin/markdown/markdown.jsmy contribution 现在 附带 了 对 它 所 创建 的 PR #734 的 引用 。

这 来自 * * Linking merged pull requests from commits * * :
我们 已经 including the containing branches and tags on commit pages 给 了 你 更多 关于 修改 的 上下文 。 现在 , 仓库 默认 分支 中 的 提交 也 会 显示 引入 它们 的 拉 取 请求 。

在 拉 取 请求 中 , 您 可以 看到 关于 为什么 引入 提交 的 讨论 , 并 更 清楚 地 了解 更改 的 原因 。
和 往常 一样 , 如果 你 知道 提交 SHA , 你 可以 跳过 提交 页面 和 search for the pull request directly

bn31dyow

bn31dyow4#

将提交哈希值放入GitHub上的Pull Request filters字段。

sdnqo3pr

sdnqo3pr5#

您也可以使用gh cli来执行此操作,以下是一个示例:

gh pr list --search "30aedc5aaab4708b2144c648a9c7ace9aff4cd31" --state merged --json url --jq '.[0].url'

有关详细信息,请参见-https://cli.github.com/manual/gh_pr_list

5lwkijsr

5lwkijsr6#

我遇到了同样的问题,并编写了pr_for_sha bash helper,记录如下:
http://joey.aghion.com/find-the-github-pull-request-for-a-commit/
pr_for_sha <COMMIT>那样调用它,它将在浏览器中打开相应的github pull请求页面。

ctrmrzij

ctrmrzij7#

我是GitHub web UI上的一个小链接的重度用户,但我希望有一个更快的方法,可以直接从终端到达那里,基本上是一个git pr SHA命令。这花了一点时间,但这里有一系列的git别名,可以在MacOS上为你设置:

git config --global alias.merge-commits '!funct() { git log --merges --reverse --oneline --ancestry-path $1..origin | grep "Merge pull request";  }; funct'
  git config --global alias.pr-number '!funct() { git merge-commits $1 | head -n1 | sed -n "s/^.*Merge pull request #\\s*\\([0-9]*\\).*$/\\1/p"; }; funct'
  git config --global alias.web-url '!funct() { git config remote.origin.url | sed -e"s/git@/https:\/\//" -e"s/\.git$//" | sed -E "s/(\/\/[^:]*):/\1\//"; }; funct'
  git config --global alias.pr '!funct() { open "`git web-url`/pull/`git pr-number $1`" ;}; funct'

如果你使用的是Linux,用xdg-open代替open,你就成功了。
请注意,只有当你练习GitHub流程并创建显式合并提交时,这才有效。
我已经在这里写了一个更详细的解释,说明这一切是如何工作的:https://tekin.co.uk/2020/06/jump-from-a-git-commit-to-the-pr-in-one-command

ergxz8rk

ergxz8rk8#

我想要类似的东西来为一个给定的提交找到一个PR,然后用Jenkins build info对PR进行注解。

# for a given SHA and repo
SHA=58d8b4407ab5d2b9a696236202308d92d3e25340
ownerRepo=redhat-developer/devspaces

# a. use gh to query a given repo for closed pulls for a given commitSHA; return the PR URL
PR_COMMENTS_URL=$(curl -sSL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.v3+json" \
    "https://api.github.com/repos/${ownerRepo}/pulls?state=closed" | \
    yq -r --arg SHA "$SHA" '.[]|select(.head.sha == $SHA)|.comments_url')

# b. comment on the PR by URL: https://api.github.com/repos/redhat-developer/devspaces/issues/848/comments
if [[ $PR_COMMENTS_URL ]]; then
    curl -sSL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.v3+json" \
        -X POST -d '{"body": "Building in currentBuild.absoluteUrl (GH API TEST)"}' "${PR_COMMENTS_URL}" | yq -r '.html_url'
fi

然后,您可以将此脚本 Package 在Jenkins groovy/bash块中,并将currentBuild.absoluteUrl从正在运行的构建传递到GH拉取请求。
使用gh cli的等效代码:

# 0. install gh CLI
sudo yum -y -q install https://github.com/cli/cli/releases/download/v2.20.2/gh_2.20.2_linux_amd64.rpm

# a. use gh to query a given repo for merged PRs for a given commitSHA; return the PR URL
PR_HTML_URL=$(gh pr list --repo ${ownerRepo} --state merged --json url --jq '.[].url' \
    --search $SHA)

# b. comment on the PR by URL: https://github.com/redhat-developer/devspaces/pull/848
if [[ $PR_HTML_URL ]]; then
    gh pr comment $PR_HTML_URL -b "Building in currentBuild.absoluteUrl (GH CLI TEST)"
fi

Jenkins管道代码示例:
https://gist.github.com/nickboldt/efb8d1b3a60c079e46b5b7aab4412e22#file-commentonpr-fragment-jenkinsfile

相关问题