
2026/02/20 23:03
リークされたCIA開発者ドキュメントに埋もれていた便利なGitワンライナーを見つけました。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(欠落している詳細を組み込む)
Summary
投稿では、開発の主ラインにすでにマージされた古いローカルGitブランチを迅速に削除し、リポジトリを整理整頓し、ナビゲーションを容易にする方法が説明されています。
まず
git branch --merged を使ってすべてのマージ済みブランチを一覧表示します。その後、現在のブランチ(*)、主な安定ブランチである main(または master)と develop を除外し、残りのブランチを安全に削除します:
git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d
この更新されたコマンドは、従来の
master の代わりに main を使用するプロジェクトにも対応しています。著者はまた、このロジックをGitエイリアスとして保存しています:
alias ciaclean='git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d'
デプロイ後に
main ブランチから ciaclean を実行すると、数十の不要なブランチをほんの数個に削減でき、今後のマージ作業がスムーズになり、開発者の混乱も減少します。このテクニックは、2017年に公開されたWikiLeaks Vault7リリースに含まれていたCIA内部のGitヒントから着想を得ました
本文
Vault7 の Git ヒント – スタイルの古いブランチを整理する
2017 年、WikiLeaks は CIA が保有していたハッキングツールと内部文書の大規模なコレクション「Vault7」を公開しました。
その中にある実装例の一つが、Git に関する実用的なヒントをまとめた開発者向けドキュメントでした。
私の
~/.zshrc にはこのヒントを入れているものがあります。
問題点
ローカル Git リポジトリでは、不要になった機能ブランチやホットフィックス、実験用ブランチなどが次第に増えていきます。
時間が経つにつれ
git branch を実行すると、使われていない名前の山ができてしまいます。
マージ済みのブランチだけを一覧表示するには:
git branch --merged
一つずつ削除しても手間がかかるので、CIA の開発チームは次のようなシンプルな解決策を提案しました。
git branch --merged | grep -v "\*\|master" | xargs -n 1 git branch -d
動作原理
git branch --merged
現在チェックアウトしているブランチにすでにマージ済みのローカルブランチを一覧表示します。grep -v "\*\|master"
カレントブランチ(
)と*
を除外し、削除対象から外します。masterxargs -n 1 git branch -d
残った各ブランチを順に安全に (
はマージされていないブランチは削除しません) 削除します。-d
更新されたコマンド
現在ほとんどのプロジェクトでは
master の代わりに main が使われています。また、頻繁に使用される他のブランチも除外するように修正した例を示します。
git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d
このコマンドは、
main ブランチでデプロイ後に実行すれば、数十個あったブランチが残り数本に減ります。
私はこの操作を Git エイリアスとして保存し、構文を覚える必要がないようにしています。
alias ciaclean='git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d'
リポジトリ内で単に
ciaclean
と実行するだけです。
小さな工夫ですが、毎週数分を節約し、リポジトリをきれいに保つのに役立ちます。
読んでいただきありがとうございます。
最新の考えやプロジェクトについては、こちらでフォローしてください。