26

私は時々、多くのブランチを含むソースコードリポジトリを操作しますが、そのほとんどは古く、通常はもはや関連性がありません。

このような場合、からのブランチの完全なリストはgit branchあまり役に立ちません。「アクティブな」ブランチのみをリストする方法はありますか?たとえば、過去n日間にコミットを受け取ったブランチのみですか?理想的には、リストには各ブランチの最終コミット日が含まれ、ブランチがすでに完全にマージされているかどうかが示されます。

PS:これは「古い」ブランチを削除することでも解決できることを理解しています(たとえば、実験的な非マージgitブランチをどうするかで説明されています)が、これは常に実用的であるとは限らず、特定のプロジェクトで受け入れられるとは限りません。

4

2 に答える 2

35

git-for-each-refを使用すると、次のように、最後のコミットのコミッター日付の降順で並べ替えられたすべてのローカルブランチとトラッキングブランチのリストを取得できます。

git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname)' refs/heads refs/remotes

これは例を出力します:

2012-06-23 refs/heads/master
2012-06-21 refs/remotes/origin/HEAD
2012-06-21 refs/remotes/origin/master

最大m個のブランチ--count=mを取得するために追加できます。コミッターの日付を使用する代わりに、もちろんさまざまな形式を使用できます。それ自体は結果を日付で制限しません。これは個別にスクリプト化する必要がありますが、少なくともコミットオブジェクトからの日付が手元にあります。--sort=-authordatefor-each-ref

于 2012-06-21T18:17:54.253 に答える
7
ls -1 --sort=time .git/refs/heads/ | while read b; do PAGER='' git log -n1 --color --pretty=format:'%C(yellow)%d%Creset - %Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit $b --; done;

このワンライナーは、新しいものから古いものへと時間でソートされたすべてのローカルブランチを印刷します。各ブランチには、人間が読める形式の日付文字列を使用した最後のコミットがあります。あなたはそれをあなたのに追加することができます.gitconfig

リモートブランチの場合、私はこの不気味な解決策を思いつきました:

git ls-remote -h origin | while read b; do PAGER='' git log -n1 --color --pretty=format:'%ct%C(yellow)%d%Creset - %Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit $( echo $b | cut -d' ' -f1 ) --; done | sort -rn -k1,10 | cut -c11-

編集:私が考えるほど、これは信頼できない可能性があるのではないかと心配しています。なぜなら、ls-remote常にリモート側に接続しているのに対し、logそうではないからです。fetchこのコマンドを実行するたびに実行する必要がある場合があります。

于 2012-06-21T09:42:47.573 に答える