답변:
해당 구문이 아닙니다. 그러나 다음과 같이 할 수 있습니다.
git branch -D 3.2 3.2.1 3.2.2
기본적으로 자식 분기는 단일 호출로 여러 분기를 삭제합니다. 불행히도 지점 이름 완성을하지 않습니다. 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.*)
. 더 길지만 알다시피 적절한 출력이 보장되는 반면 스크립트 및 한 줄짜리에서 엉망이 될 수있는 및 (symrefs) 와 git branch
같은 결과가 꽤 좋습니다. *
->
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}
세 가지 모두 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
하고이 답변의 제안과 결합하십시오.
git branch | cut -c3- | egrep "^3.2" | xargs git branch -D
^ ^ ^ ^
| | | |--- create arguments
| | | from standard input
| | |
| | |---your regexp
| |
| |--- skip asterisk
|--- list all
local
branches
편집하다:
자식 브랜치 출력은 스크립팅에 사용되지 않기 때문에 더 안전한 버전 (Jakub Narę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
A는 강제 삭제는 사용해야 -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
파워 쉘 솔루션 :
창을 실행중인 경우 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 문서를 살펴보십시오 .
@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
편집 : 나는 맥 OS를 사용하고 있습니다
나는 방금 쓸모없는 지역 / 원격 지점을 오늘 정리했습니다.
아래는 내가 한 방법입니다.
1. 모든 분기 이름을 텍스트 파일로 나열하십시오.
자식 분기 -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 -D <branchName>
불필요한 모든 참조를 제거하는 모든 분기를 제거 할 수 있습니다.
rm .git/refs/heads/3.2.*
git gc
) 에서 실행하면 예상치 못한 결과가 발생합니다 . 하지마
git branch -D $(git branch | grep 3.2*)
-이것은 나를 위해 일했다. 이름이 "3.2"로 시작하는 분기를 삭제합니다.grep
-출력에서 패턴 일치 (git branch
이 경우)$()
-결과를 실행하고 배치하는 것을 의미합니다.|
-체인.