11

对于我们的 buildbot,我想显示最近更新的活动(未发布)分支。假设我有一个master分支,以及以下,从最旧到最新的提交:

  • branch1(未并入master
  • branch2(合并)
  • branch3(未合并)

我能够分别获得这些列表中的每一个......例如,让所有分支未合并到master

$ git branch -r --no-merged origin/master
origin/branch1
origin/branch3

或者获取按最近提交排序的前 15 个分支(通过https://coderwall.com/p/ndinba):

$ git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname:short)' --count=15 refs/remotes/origin/
2013-03-22 origin/branch3
2013-03-22 origin/branch2
2013-03-22 origin/master
2013-03-22 origin/branch1

所以我基本上想要第二个列表,减号branch2(有或没有master)。希望这有意义吗?

4

3 回答 3

14

您可以将两者结合起来,如下所示:

git for-each-ref --sort=-committerdate --format="%(committerdate:short) %(refname:short)" --count=15 $(git branch -r --no-merged origin/master | sed -e 's#^ *#refs/remotes/#')

这将限制for-each-ref只处理branch --no-merged报告的分支......

git branch编辑:实际测试后固定输出格式...

于 2013-03-22T19:30:29.450 回答
2

你不能只是 grep 出 branch2 吗?

基本上,类似:

for branch in `git branch -r --no-merged origin/master`; do git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname:short)' --count=15 refs/remotes/origin/ | grep $branch; done;

鉴于您的示例输出,这对我有用。

于 2013-03-22T19:29:48.003 回答
0

使用 git 2.7 (Q4 2015), git for-each-ref, 将支持该--no-merged选项

git for-each-ref --no-merged master refs/heads/

使用文档:

--no-merged [<object>]:

仅列出无法从指定提交(如果未指定,则为 HEAD)提示的 refs。


请参阅提交 4a71109提交 ee2bd06提交 f266c91提交 9d306b5提交 7c32834提交 35257aa提交 5afcb90、...、提交 b2172fd(2015 年 7 月 7 日)和提交 af83baf(2015 年 7 月 9 日),作者为Karthik Nayak(KarthikNayak
(由Junio C Hamano 合并gitster——提交 9958dd8中,2015 年 10 月 5 日)

git tag -l" " 和 " " 中的一些功能git branch -l已提供给 " git for-each-ref" ,以便最终可以在一两个后续系列中在所有三个之间共享统一的实现。

* kn/for-each-tag-branch:
  for-each-ref: add '--contains' option
  ref-filter: implement '--contains' option
  parse-options.h: add macros for '--contains' option
  parse-option: rename parse_opt_with_commit()
  for-each-ref: add '--merged' and '--no-merged' options
  ref-filter: implement '--merged' and '--no-merged' options
  ref-filter: add parse_opt_merge_filter()
  for-each-ref: add '--points-at' option
  ref-filter: implement '--points-at' option  

使用 Git 2.29(2020 年第四季度),“ git for-each-refman和列出 refs 的朋友用于仅允许一个--merged--no-merged过滤它们;他们学会了结合这两种过滤。

请参阅Aaron Lipman ( ) 的提交b59cdff、提交a1b19aa ( 2020 年 9 月 18 日)和提交 21bf933提交 415af72提交 b775d81(2020 年 9 月 15 日(由Junio C Hamano 合并 -- --提交 26a3728中,2020 年 9 月 22 日)alipman88
gitster

ref-filter: 允许mergedno-merged过滤

签字人:Aaron Lipman

启用 ref-filter 处理多个mergedno-merged过滤器,并将功能扩展到( man )( man )和. 这提供了一种简单的方法来检查“毕业候选人:git branchgit tag gitfor-each-ref

$ git branch --no-merged master --merged next

如果通过了多个合并(或多个no-merged)过滤器,则 refs 必须可以从任何一个合并提交中访问,并且不能从任何提交中访问no-merged

filters现在在其手册页中包含:

当组合多个--merged--no-merged过滤器时,仅显示可从至少一个--merged 提交中访问的引用,并且从不显示任何--no-merged提交。

注意:相同的 Git 2.29(2020 年第四季度)添加了一个修补程序。

请参阅René Scharfe ( ) 的提交 5336d50(2020 年 9 月 26 日(由Junio C Hamano 合并 -- --提交 03b0198中,2020 年 10 月 4 日)rscharfe
gitster

ref-filter: 插入内存​​泄漏reach_filter()

签字人:René Scharfe

21bf933928(“ ref-filter:允许合并和不合并过滤器”,2020 年 9 月 15 日,Git v2.29.0 -批次 #16中列出的合并)添加了对. 通过推迟分配它直到我们知道我们需要它来避免泄漏当时未使用的数组的内存。reach_filter()

于 2015-10-07T09:25:19.353 回答