我正在开发一个拥有许多分支和拉取请求的GitHub存储库。
例如,假设我有以下拉取请求:
a
到 分支X
b
到 分支X
c
到 分支Y
d
到 分支X
e
到 分支Y
。
是否有一种方法可以找到所有针对分支 X
的拉取请求(即 a -> X
,b -> X
,d -> X
)?
我正在开发一个拥有许多分支和拉取请求的GitHub存储库。
例如,假设我有以下拉取请求:
a
到 分支 X
b
到 分支 X
c
到 分支 Y
d
到 分支 X
e
到 分支 Y
。是否有一种方法可以找到所有针对分支 X
的拉取请求(即 a -> X
,b -> X
,d -> X
)?
可以的,你可以做到。
在GitHub术语中,“to branch”被称为“base”,所以搜索短语是:is:open is:pr base:X
官方描述:基于分支名称搜索
您还可以选择添加is:merged
或is:unmerged
过滤器。
head
)分支”、“to(base
)分支”和作者搜索PR(Pull Requests),包括使用可以快速在搜索栏中触发的自定义Chrome搜索引擎:注意:下面在GitHub上搜索PR(Pull Requests)的搜索是在这里完成的(https://github.com --> 顶部的“Pull requests”)(直接链接:https://github.com/pulls),而不是在几乎任何GitHub页面左上角的通用GitHub搜索栏中,尽管它们也可能会在那里起作用。
另请参见我在这里的答案:我可以使用逻辑运算符OR搜索GitHub标签吗?
在 GitHub 的术语中,你正在合并的分支是“源”分支(FROM),而你将合并到的分支是“目标”分支(TO)。请查看此处:https://docs.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-by-branch-name。我不确定为什么他们没有选择使用“from_branch”和“to_branch”,因为那样会更容易记住。is:open is:pr archived:false head:my_branch
可选地,也可以指定一个代码库:
is:open is:pr archived:false repo:some_username/some_repository head:my_branch
base:my_branch
查找所有合并到my_branch
的PR:is:open is:pr archived:false base:my_branch
可选,还可以指定一个代码库:
is:open is:pr archived:false repo:some_username/some_repository base:my_branch
From the official GitHub documentation: https://docs.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-by-branch-name:
Search by branch name
You can filter pull requests based on the branch they came from (the "head" branch) or the branch they are merging into (the "base" branch).
Qualifier Example --------------------- ------------------------------------------------- `head:HEAD_BRANCH` `head:change is:closed is:unmerged` matches pull requests opened from branch names beginning with the word "change" that are closed. `base:BASE_BRANCH` `base:gh-pages` matches pull requests that are being merged into the gh-pages branch.
对于那些不知道的人来说,Chrome浏览器允许您创建自定义搜索引擎。如果我在浏览器搜索栏中键入gto
,然后按下空格或Tab,然后输入我的分支名称my_branch
,我会看到这个结果。我实际上是使用我设置的gto
快捷方式触发的自定义搜索引擎,搜索所有合并到分支my_branch
的开放式PR:
GitHub PRs merging TO branch
gto
%s
替换查询的URL:https://github.com/pulls?q=is%3Aopen+is%3Apr+archived%3Afalse+base%3A%s
GitHub PRs merging FROM branch
gfrom
%s
替换查询的URL:https://github.com/pulls?q=is%3Aopen+is%3Apr+archived%3Afalse+head%3A%s
GitHub PRs BY this User
gby
%s
替换查询的URL:https://github.com/pulls?q=is%3Aopen+is%3Apr+author%3A%s+archived%3Afalse+
%s
替换要搜索的搜索字符串。就这样!一旦在网站上进行自定义搜索,所有将搜索变量存储到URL中的网站都可以使用此过程,这是许多网站(如果不是大多数)具备的搜索功能。截至2016-01-10,这已被添加到gh搜索栏api,请参见下一个答案。
原始的已接受(现已公开)答案未被编辑。
GitHub目前没有提供通过Web界面过滤拉取请求的方法,以便按其目标分支进行筛选。相反,您当前只能获得具有主题分支名称的整个拉取请求列表:
点击进入拉取请求会显示目标分支,但这并不能帮助你进行任何想要做的筛选。
可以使用 GitHub REST API 进行拉取请求的筛选,然而:
GET /repos/:owner/:repo/pulls?base=:branch
这将显示代码库:owner/:repo
的所有打开拉取请求,过滤目标为:branch
分支的请求。参考文档:
按基本分支名称筛选拉取请求。 例如:
gh-pages
。
如果您可以使用curl
,则可以从命令行测试公共代码库。 这里查询的代码库是此代码库(https://github.com/codecombat/codecombat),我们正在获取所有从base
分支(PR合并到的分支)中命名为master
的拉取请求,然后将结果存储到我们接下来要解析的 pulls.json 文件中。
curl https://api.github.com/repos/codecombat/codecombat/pulls?base=master > \
pulls.json
这将返回一个JSON响应,其格式如下,现在存储在文件pulls.json中:
[
{
"url": "https://api.github.com/repos/codecombat/codecombat/pulls/879",
"id": 14955421,
"html_url": "https://github.com/codecombat/codecombat/pull/879",
"head": {
"label": "DanielRodriguezRivero:patch-4",
"ref": "patch-4",
"sha": "baff84f0aeee12f23e3608558ae5341a0b5f939b",
"repo": {
"id": 16202384,
"name": "codecombat",
"full_name": "DanielRodriguezRivero/codecombat"
}
},
"base": {
"label": "codecombat:master",
"ref": "master",
"sha": "5e2f3ac7cb731a6e40e81737a5122c7fe1b746d3",
"repo": {
"id": 15193430,
"name": "codecombat",
"full_name": "codecombat/codecombat"
}
}
}
]
数组中的每个对象都是一个拉取请求 (PR),由我们在上面的 curl
命令中指定的 base=target
分支过滤,我们将其设置为 master
。
JSON 实际上包含比这更多的信息;我已删除了大部分内容,以显示与此问题相关的部分。
您可以编写 Python/Ruby/PHP/其他脚本来解析每个拉取请求的 html_url
属性,并在命令行上列出它。例如,下面是一个简单的 Ruby 脚本,它将解析从 curl
输出保存的 JSON 响应的输出:
require 'json'
json = JSON.parse(File.read('./pulls.json'))
pulls = json.map { |pull| { title: pull['title'], url: pull['html_url'] } }
pulls.each do |pull|
puts pull.values
puts
end
它输出以下内容:
$ ruby parser.rb
Update es-ES.coffee
https://github.com/codecombat/codecombat/pull/879
Fix deltas referring to last system saved
https://github.com/codecombat/codecombat/pull/874
Refactor getNameById and add naming to systems in deltas
https://github.com/codecombat/codecombat/pull/866
Traducido varios textos del fichero es-ES.coffe al espa├▒ol de Espa├▒a
https://github.com/codecombat/codecombat/pull/865
Anon name collide
https://github.com/codecombat/codecombat/pull/834
gh
CLI。cli/cli
存储库进行演示:
gh pr list --base trunk -R cli/cli
输出:#3045 [hackday] mergeconflict hackday2102
#3044 Isolate test suite from environment variables env-tests
#3042 Remove functionality to add, view and edit binary files in gists g14a:bug/gist-binary-files
#3023 Issue/pr create: exit with nonzero status code when "Cancel" was chosen cancel-error-status
#3018 Add `pr create --body-file` flag castaneai:pr-create-body-file
#3010 Add `api --cache` flag api-cache
#3008 Add interactive select in gist view ganboonhong:interactive-gist-view
#2997 Feature/add files to gist g14a:feature/add-files-to-gist
#2991 Repo create tweaks repo-create-prompt-change
#2953 Add `repo list` command cristiand391:add-repo-list
#2923 [WIP] first round of actions support actions
#2728 Better completions rsteube:better-completions
#2261 pr status: show number of approvals despreston:des/approval-count
#2160 Sign Windows .exes in a post-build hook mbpreble:sign-windows-executables
#2080 store gh config in %APPDATA% on windows os RozzaysRed:appdata_configPath