Pull Requests非常适合用于理解围绕一个或一组对回购所做的更改的更大的思考。读取拉取请求是一种快速“了解”项目的好方法,因为您得到的不是对源的小原子更改,而是更大的逻辑更改组。类似于将代码中的行组织成相关的“节”,以使其更容易阅读。
我发现自己正在查看一个文件或一个提交,我想知道是否有一种方法可以将提交回溯到最初创建它的Pull Request。Pull Request最终会被合并,但合并提交是不必要的。
Pull Requests非常适合用于理解围绕一个或一组对回购所做的更改的更大的思考。读取拉取请求是一种快速“了解”项目的好方法,因为您得到的不是对源的小原子更改,而是更大的逻辑更改组。类似于将代码中的行组织成相关的“节”,以使其更容易阅读。
我发现自己正在查看一个文件或一个提交,我想知道是否有一种方法可以将提交回溯到最初创建它的Pull Request。Pull Request最终会被合并,但合并提交是不必要的。
当前回答
将提交散列放入GitHub上的Pull Request filters字段。
其他回答
你可以去GitHub,在搜索栏中输入SHA,确保你选择了左边的“问题”链接。
2017年7月13日更新
通过GitHub UI,现在有一个非常简单的方法来做到这一点。如果您正在UI分支中的提交列表中查看一个提交,请单击指向该提交本身的链接。如果该提交有一个PR,并且它没有直接添加到分支,那么一个列出PR号和它进入的分支的PR链接将直接位于页面顶部的提交消息下面。
如果你只有提交SHA而没有其他的,并且不想去挖掘它,只需添加/commit/[commit SHA]到repo url,你就会看到提交页面,如果存在PR链接的话。 例如,SHA为52797a7a3b087231e4e391e11ea861569205aaf4, repo为https://github.com/glimmerjs/glimmer-vm,则登录https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b087231e4e391e11ea861569205aaf4
我想要一些类似的东西,为给定的提交找到PR,然后用Jenkins构建信息对PR进行评论。下面是使用GH API的工作原理:
# 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
然后,您可以将此脚本包装到Jenkins groovy/bash块中,并传入currentBuild。从运行的构建到GH拉取请求的absoluteUrl。
使用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
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all --contains <COMMIT>
控件的名称,如果有必要,将origin更改为指向 拉请求将被发送到的GitHub存储库。第一个 对于任何给定的远程,命令只需要运行一次,而第二次则需要 通常在获得其他更新时完成。
这将导致git与实际一起获得有关拉请求的信息 分支。它们会显示为远程跟踪分支,如origin/pull/123。 一旦完成了这一步,你就可以使用——all和——contains来描述git了 选项显示具有引用提交的第一个分支。
然而,如果您正在寻找的提交实际上是一个 从拉请求提交的修改版本,例如,如果发生了更改 是基于其他工作还是做合并的人决定做一些 的变化。
你也可以使用gh cli来实现,这里有一个例子:
gh pr list --search "30aedc5aaab4708b2144c648a9c7ace9aff4cd31" --state merged --json url --jq '.[0].url'
欲了解更多信息,请参见- https://cli.github.com/manual/gh_pr_list
我一直是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,那么将open替换为xdg-open,您就成功了。适应使用GitLab也不应该太难。
请注意,这只会在你练习GitHub流和创建显式合并提交时起作用。
我在这里写了一篇关于这一切如何工作的更详细的解释:https://tekin.co.uk/2020/06/jump-from-a-git-commit-to-the-pr-in-one-command