11

私たちのビルドボットでは、最近更新されたアクティブな (リリースされていない) ブランチを表示したいと考えています。master古いコミットから最新のコミットまで、次のようなブランチがあるとします。

  • branch1( にはマージされませんmaster)
  • branch2(合併)
  • branch3(合併していません)

これらのリストのそれぞれを個別に取得できます...たとえば、マージされていないすべてのブランチを取得するにはmaster:

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

または、最新のコミット順 ( https://coderwall.com/p/ndinba経由) で上位 15 のブランチを取得するには:

$ 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

だから私は基本的にその2番目のリスト、マイナスbranch2(ありまたはなしmaster)が必要です。それが理にかなっていることを願っていますか?

4

3 に答える 3

14

次のように、2 つを組み合わせることができます。

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

branch2 を grep できませんか?

基本的に、次のようなものです:

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 (2015 年第 4 四半期) では、オプションgit for-each-refがサポートされます。--no-merged

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

ドキュメントで:

--no-merged [<object>]:

指定されたコミット (指定されていない場合は HEAD) からヒントに到達できない参照のみを一覧表示します。


commit 4a71109、commit ee2bd06commit f266c91commit 9d306b5commit 7c32834commit 35257aacommit 5afcb90、 ...、commit b2172fd (07 Jul 2015)、commit af83baf (09 Jul 2015) by Karthik Nayak ( KarthikNayak)を参照してください。
( 2015 年 10 月 5 日にコミット 9958dd8Junio C Hamanogitsterによってマージされました)

git tag -l「 」と「 」の一部の機能が「 」git branch -lで利用できるようにgit for-each-refなったため、最終的には 3 つすべてで統一された実装を共有できるようになりました。

* 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 年第 4 四半期) では、" git for-each-ref" ( man )と、ref をリストする友人は、1 つだけを許可する--merged--no-merged、それらをフィルターするために使用されていました。彼らは、両方の種類のフィルタリングを組み合わせることを学びました。

commit b59cdff、commit a1b19aa (2020 年 9 月 18 日)、commit 21bf933commit 415af72commit b775d81 (15 Sep 2020) by Aaron Lipman ( alipman88)を参照してください。
( 2020 年 9 月 22 日、コミット 26a3728Junio C Hamanoによってマージされました)gitster

ref-filter: 許可mergedおよびno-mergedフィルター

署名者: Aaron Lipman

ref-filter を有効にして、複数のmergedandフィルターを処理し、機能を( man )( man )およびno-mergedに拡張します。 これにより、「卒業候補:git branchgit tag gitfor-each-ref

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

複数のマージされた (または複数のno-merged) フィルターが渡された場合、参照は、マージされたコミットのいずれかから到達可能である必要があり、どのコミットからも到達可能ではない必要がありますno-merged

filtersmanページに含まれるようになりました:

--merged複数のフィルターを組み合わせると--no-merged、少なくとも 1 つの--merged コミットから到達可能で、どのコミットからも到達できない参照のみ--no-mergedが表示されます。

注: 同じ Git 2.29 (2020 年第 4 四半期) がホットフィックスを追加します。

René Scharfe ( )によるcommit 5336d50 (2020 年 9 月 26 日)を参照してください。( 2020 年 10 月 4 日コミット 03b0198Junio C Hamanoによってマージされました)rscharfe
gitster

ref-filter: メモリ リークのプラグインreach_filter()

署名者: René Scharfe

. _ ref-filter_ _ _ _ _ reach_filter()_
必要になるまで割り当てを延期することで、未使用の配列のメモリリークを回避します。

于 2015-10-07T09:25:19.353 に答える