回答:
その構文ではありません。しかし、あなたはこのようにそれを行うことができます:
git branch -D 3.2 3.2.1 3.2.2
基本的に、gitブランチは1回の呼び出しで複数のブランチを削除します。残念ながら、ブランチ名の補完は行いません。ただし、bashでは次のことができます。
git branch -D `git branch | grep -E '^3\.2\..*'`
git branch -D/-d
は私にとってはうまくいきます。(おそらく最新のgit.git contribディレクトリから)あなたのものを更新したいかもしれません。
git branch | ...
を使用できます$(git for-each-ref --format='%(refname:short)' refs/heads/3.*)
。それは長いですが、私は知っているが、一方で適した出力であることが保証されますgit branch
のようなもので、かなりの出力を持っている*
し、->
(symrefs用)ができるスクリプト/ワンライナーで混乱あなたを。
grep
常にフラグを含めるようにエイリアスを設定しました--color=always
- 色フラグなしで実行するまでgit branch -D
スローしていましたerror: branch 'my_branch' not found.
。
git branch --merged ${1-$(current_branch)} | grep -v ${1-$(current_branch)} | xargs git branch -d
git branch -D 3.2{,.1,.2}
を使用すると、3つのブランチすべてを削除するように書き込むことができますgnu.org/software/bash/manual/html_node/Brace-Expansion.html
まあ、最悪の場合、次のように使用できます。
git branch | grep '3\.2' | xargs git branch -d
| xargs git branch -d
一部なしで実行して、実際に何が削除されるかを確認することをお勧めします。
grep
の出力には使用しないことをお勧めしgit branch
ます。いつでも変更できます。他の回答で提案されているようにfor-each-ref
、を--format
paramsと一緒に使用し、次にこの回答の提案と組み合わせます。
git branch | cut -c3- | egrep "^3.2" | xargs git branch -D
^ ^ ^ ^
| | | |--- create arguments
| | | from standard input
| | |
| | |---your regexp
| |
| |--- skip asterisk
|--- list all
local
branches
編集:
gitブランチの出力はスクリプトでの使用を意図していないため、より安全なバージョン(JakubNarębskiとJefromiが推奨)。
git for-each-ref --format="%(refname:short)" refs/heads/3.2\* | xargs git branch -D
...またはxargs-free:
git branch -D `git for-each-ref --format="%(refname:short)" refs/heads/3.2\*`
git branch
スクリプトの出力を使用しないでください。を使用しgit for-each-ref
ます。
git for-each-ref --format="%(refname:short)" refs/tags/\*@\* | xargs git tag -d
If one or more patterns are given, only refs are shown that match against at least one pattern, either using fnmatch(3) or literally, in the latter case matching completely or from the beginning up to a slash
-D
は、ほとんどの場合、最初に安全であるためです。-d
git branch --listを使用して適格なブランチを一覧表示し、git branch -D / -dを使用して適格なブランチを削除できます。
ライナーの例:
git branch -d `git branch --list '3.2.*'`
error: branch 'package.json' not found.
。*の展開が早すぎるようで、すべてのファイルとディレクトリの名前に対応するブランチを削除しようとします。
gitconfig
しかし、これをエイリアスとして使用すると問題が発生します...
git branch --list '3.2.*'
git branch -d (git branch --list '3.2.*').trim()
使用する
git for-each-ref --format='%(refname:short)' 'refs/heads/3.2.*' |
xargs git branch -D
alias grefs='git for-each-ref --format="%(refname:short)"'
これを行うことができますgrefs | grep 'regexpattern' | xargs git branch -D
この正確な理由により、ブランチ名の最初の3文字としてイニシャルとダッシュ(at-)を入れました。
git branch -D `git branch --list 'at-*'`
gitコマンドプロンプトの使用に限定されていない場合は、いつでも実行git gui
して、[ブランチ]-> [削除]メニュー項目を使用できます。削除するすべてのブランチを選択して、それをリッピングさせます。
Powershellソリューション:
Windowsを実行している場合は、PowerShellを使用して複数のブランチを一度に削除できます...
git branch -D ((git branch | Select-String -Pattern '^\s*3\.2\..*') | foreach{$_.ToString().Trim()})
//this will remove all branches starting with 3.2.
git branch -D ((git branch | Select-String -Pattern 'feature-*') | foreach{$_.ToString().Trim()})
// this will delete all branches that contains the word "feature-" as a substring.
また、PowershellのSelect-Stringコマンドを使用して、パターンマッチングの動作を微調整することもできます。powershell docsをご覧ください。
@gawi(上記)の回答に基づいて、便利な小さな関数を作成しました。
removeBranchesWithPrefix() {
git for-each-ref --format="%(refname:short)" refs/heads/$1\* | xargs git branch -d
}
これをに追加して、.bash_profile
ターミナルを再起動します。その後、次のようにコマンドラインから呼び出すことができます:
removeBranchesWithPrefix somePrefix
注意
私は現在、ソフト削除の設定をしています。つまり、すでにマージされていない限り、ブランチは削除されません。エッジに住みたい場合は、に変更-d
する-D
と、プレフィックスに関係なくすべてが削除されます!
あなたはこの小さなアイテムが好きかもしれません...それはリストを引き出し、最終的にすべての選択を削除する前に各アイテムの確認を求めます...
git branch -d `git for-each-ref --format="%(refname:short)" refs/heads/\* | while read -r line; do read -p "remove branch: $line (y/N)?" answer </dev/tty; case "$answer" in y|Y) echo "$line";; esac; done`
(通常のように)-Dを使用して強制的に削除します。
読みやすくするために、ここでは行ごとに分割しています...
git branch -d `git for-each-ref --format="%(refname:short)" refs/heads/\* |
while read -r line; do
read -p "remove branch: $line (y/N)?" answer </dev/tty;
case "$answer" in y|Y) echo "$line";;
esac;
done`
ここにxargsアプローチがあります...
git for-each-ref --format="%(refname:short)" refs/heads/\* |
while read -r line; do
read -p "remove branch: $line (y/N)?" answer </dev/tty;
case "$answer" in
y|Y) echo "$line";;
esac;
done | xargs git branch -D
最後に、これを.bashrcに入れたい
alias gitselect='git for-each-ref --format="%(refname:short)" refs/heads/\* | while read -r line; do read -p "select branch: $line (y/N)?" answer </dev/tty; case "$answer" in y|Y) echo "$line";; esac; done'
そのように私はただ言うことができます
gitSelect | xargs git branch -D.
次のコマンドを使用して、すべてのブランチを削除します(チェックアウトしたブランチは削除されません)。
git branch | cut -d '*' -f 1 | tr -d " \t\r" | xargs git branch -d
編集:私はMac OSを使用しています
私はあなたがwindowsを使っています、これを行うためにpowershellを使うことができます:
git branch | grep 'feature/*' |% { git branch -D $_.trim() }
feature/*
好きなパターンに置き換えてください。
今日、廃止されたローカル/リモートブランチの大規模なセットをクリーンアップしました。
以下は私がそれをした方法です:
1.すべてのブランチ名をテキストファイルにリストします。
gitブランチ-a >> BranchNames.txt
2.削除するブランチをコマンド「git branch -D -r」に追加します。
git branch -D -r origin / dirA / branch01 origin / dirB / branch02 origin / dirC / branch03(...ブランチ名を追加)
3. cmdを実行します
そして、これは「git push origin --delete」よりもはるかに高速で信頼性が高く機能します。
これは他の回答に記載されている最もスマートな方法ではないかもしれませんが、これは非常に簡単で使いやすい方法です。
指定されたパターンに基づいて複数のブランチを削除するには、次のようにします。
ターミナルまたは同等のものを開き、次のコマンドを入力します。
git branch | grep "<pattern>" (preview of the branches based on pattern)
git branch | grep "<pattern>" | xargs git branch -D (replace the <pattern> with a regular expression to match your branch names)
すべての3.2.xブランチを削除します。入力する必要があります
git branch | grep "3.2" | xargs git branch -D
それで全部です!
準備できた!
git branch -D <branchName>
すべての不要な参照を削除して、すべてのブランチを削除できます。
rm .git/refs/heads/3.2.*
git gc
)。それをしないでください。
git branch -D $(git branch | grep 3.2*)
-これでうまくいきました。名前が「3.2」で始まるブランチを削除します。grep
-(git branch
この場合は)出力のパターンマッチング。$()
-結果を実行して配置することを意味します。|
-連鎖。