ブランチを日付別にリストする以下のスクリプトを見つけました。これをフィルタリングして新しいブランチを除外し、結果を Git の削除コマンドにフィードするにはどうすればよいですか?
for k in $(git branch | sed /\*/d); do
echo "$(git log -1 --pretty=format:"%ct" $k) $k"
done | sort -r | awk '{print $2}'
とを使っ--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
ただし、これにより、マスターにマージされていないブランチや、チェックアウトされたブランチが削除されることに注意してください。
git ブランチ --sort=committerdate | 頭 -n10 | xargs git ブランチ -D
ブランチ内のコミットではなく、参照のみを削除したいと考えています。最新のものを除くすべてのマージされたブランチを削除するには__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
ます...ただし、ダングリング コミットがある時点でガベージ コレクションされるため、注意してください。