如何获取未合并为master的分支列表,按最近提交的顺序排序?

时间:2013-03-22 18:53:31

标签: git

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

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

我可以分别获得这些列表中的每一个......例如让所有分支都没有合并到master

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

或者获得前十五个分支,按最近提交的顺序排列(通过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)。希望有道理吗?

3 个答案:

答案 0 :(得分: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输出的格式...

答案 1 :(得分:1)

难道你不能只看出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;

鉴于您的样本输出,这对我有用。

答案 2 :(得分:0)

使用git 2.7(2015年第4季度),git for-each-ref,将支持--no-merged选项

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

使用doc:

--no-merged [<object>]:
  

仅列出其指针无法从指定提交到达的引用(如果未指定,则为HEAD)。

请参阅commit 4a71109commit ee2bd06commit f266c91commit 9d306b5commit 7c32834commit 35257aacommit 5afcb90,..., commit b2172fd(2015年7月7日)和commit af83baf(2015年7月9日)Karthik Nayak (KarthikNayak)
Junio C Hamano -- gitster --合并于commit 9958dd8,2015年10月5日)

  

来自&#34; git tag -l&#34;的一些功能和&#34; git branch -l&#34;已经成了   可用于&#34; git for-each-ref&#34;这样最终统一了   在后续工作中,可以在所有三个方面共享实施   一两个系列。

* 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