誤って 150 以上のローカル ブランチを中央リポジトリにプッシュしてしまったチーム メンバーがいます。ありがたいことに、それらはすべて同じプレフィックスを持っています。その接頭辞を使用して、それらすべてを一度に削除するために使用できる git コマンドまたはクールな小さなシェル スクリプトはありますか?
18 に答える
PREFIX
次のコマンドを使用して、リモート サーバー上のプレフィックスを持つすべてのブランチを削除します。
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
最初にドライランを実行して、削除するブランチであるかどうかを確認することをお勧めします。
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
これは重複した回答である可能性がありますが、以下でテストされ、完全に機能しました。
- ローカルブランチを強制削除
git branch -D ブランチ名
- リモートブランチを削除
git push origin --delete ブランチ名
- 複数のローカル ブランチを削除する
git branch -D ブランチ名 1 ブランチ名 2
- 複数のリモート ブランチを削除する
git push origin --delete ブランチ名 1 ブランチ名 2
- プレフィックス付きのローカル ブランチを削除します。たとえば、機能/*
git branch -D $(git branch --list 'feature/*')
git branch -D backticks $(git branch --list 'feature/*' backticks )
- プレフィックス付きのリモート ブランチを一覧表示します。
git ブランチ -r | grep -Eo 'feature/.*'
- プレフィックス付きのリモート ブランチを削除する
git ブランチ -r | grep -Eo 'feature/.*' | xargs -I {} git プッシュ元:{}
Neevek のソリューションは洗練されていますが、より優れたものになる可能性があります。提案されているソリューションは、ブランチごとに 1 回「git push」を呼び出します。これは、ブランチごとに追加のネットワーク ラウンドトリップが削除されることを意味します。とにかくawkを使用しているので、それを使用して「:」をプレフィックスとして使用しないでください。そうすれば、xargsは「git push」を1回だけ呼び出して、すべてのブランチを一度に削除できます。
ドライランを実行して、削除されるブランチを一覧表示します。
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}'
実際に削除をプッシュする最終的な解決策:
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}' | xargs git push origin
ニーベックに感謝します。これは、私の目的に合わせて再構成した後、うまく機能しました。
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2 "/" $3}' | xargs -I {} git push origin :{}
フォルダ構造も考慮する必要がありました。私の機能ブランチは、origin/feature/PREFIX-FEATURENUMBER のようなフォルダー構造にあります。したがって、$2=folder + $3= branchname からパターンを構築する必要がありました。
Github には、ブランチをすばやく削除するための優れた UI とメカニズムもあります。
ブランチ名にスラッシュ構造を使用しているため、awk を使用できませんでした。
git branch -r | grep "origin/users/YOURNAME" | sed -r 's/^.{9}//'| xargs -i sh -c 'git push origin --delete {}'
これにより、すべてのリモート ブランチが取得され、1 人のユーザーの 1 つだけが取得され、「origin/」文字列がリモート化され、それぞれに対して削除が実行されます。