62

ブランチを日付別にリストする以下のスクリプトを見つけました。これをフィルタリングして新しいブランチを除外し、結果を Git の削除コマンドにフィードするにはどうすればよいですか?

for k in $(git branch | sed /\*/d); do 
  echo "$(git log -1 --pretty=format:"%ct" $k) $k"
done | sort -r | awk '{print $2}'
4

14 に答える 14

66

とを使っ--since--beforeみませんか?

たとえば、これにより、1週間コミットを受け取らなかったすべてのブランチが削除されます。

for k in $(git branch | sed /\*/d); do 
  if [ -z "$(git log -1 --since='1 week ago' -s $k)" ]; then
    git branch -D $k
  fi
done

1週間以上経過しているすべてのブランチを削除する場合は、次を使用します--before

for k in $(git branch | sed /\*/d); do 
  if [ -z "$(git log -1 --before='1 week ago' -s $k)" ]; then
    git branch -D $k
  fi
done

ただし、これにより、マスターにマージされていないブランチや、チェックアウトされたブランチが削除されることに注意してください。

于 2012-04-26T00:38:10.510 に答える
1

git ブランチ --sort=committerdate | 頭 -n10 | xargs git ブランチ -D

于 2021-09-17T12:10:28.263 に答える
0

ブランチ内のコミットではなく、参照のみを削除したいと考えています。最新のものを除くすべてのマージされたブランチを削除するには__X__:

git branch -d `for k in $(git branch | sed /\*/d); do
  echo "$(git log -1 --pretty=format:"%ct" $k) $k"
done | sort -r | awk 'BEGIN{ORS=" "}; {if(NR>__X__) print $2}'`

timestamp より前のすべてのブランチを削除するには__Y__:

git branch -d `for k in $(git branch | sed /\*/d); do
  echo "$(git log -1 --pretty=format:"%ct" $k) $k"
done | sort -r | awk 'BEGIN{ORS=" "}; {if($1<__Y__) print $2}'`

-dマージされていないブランチも削除する場合は、オプションを に置き換え-Dます...ただし、ダングリング コミットがある時点でガベージ コレクションされるため、注意してください。

于 2012-04-26T01:21:28.587 に答える