실수로 150 개가 넘는 지역 지점을 중앙 저장소로 푸시 한 팀원이 있습니다. 고맙게도 그들은 모두 같은 접두사를 가지고 있습니다. 그 접두사를 사용하면 한 번에 모든 것을 삭제할 수있는 git 명령이나 멋진 작은 쉘 스크립트가 있습니까?
답변
다음 명령을 사용하여 PREFIX
원격 서버 에서 접두사가있는 모든 분기를 제거 합니다.
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
제거 할 분기인지 확인하기 위해 먼저 드라 이런을 수행 할 수 있습니다.
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
답변
예를 들어 더 간단한 방법을 원한다면 3 개 또는 4 개의 브랜치를 삭제하십시오.
git push origin --delete <branch1> <branch2> <branch3>
중요 : Git v1.7.0 이상 에서만 작동합니다 .
답변
훌륭하고 우아한 솔루션에 대한 Neevek 에게 감사드립니다 !
하지만 난 때문에 지점 이름에 슬래시 몇 가지 문제 (내가 망할 놈의 흐름을 사용하고 있습니다),이 awk
필드 분리 /
( -F
옵션)
따라서 내 솔루션은 Neevek의을 기반으로 하지만 분기 이름을 /
. 이 경우 리모컨이 origin
. 이름이 PATTERN
다음 과 같은 원격 분기를 삭제하는 명령 :
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}' | xargs -I {} git push origin :{}
그리고 삭제할 항목을 확인하는 것을 잊지 마십시오.
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}'
유용한 팁 : 분기 이름 ( origin/
접두사 없음)이 텍스트 파일 (한 줄에 하나의 분기 이름)에 저장된 경우 다음을 실행하십시오.
cat your_file.txt | xargs -I {} git push origin :{}
답변
이것은 중복 답변 일 수 있지만 아래에서 테스트되어 완벽하게 작동했습니다.
- 로컬 브랜치를 강제 삭제
git branch -D branch-name
- 원격 지점 삭제
git push origin –delete branch-name
- 2 개 이상의 로컬 브랜치 삭제
git branch -D branch-name1 branch-name2
- 둘 이상의 원격 지점 삭제
git push origin –delete branch-name1 branch-name2
- 접두사가있는 로컬 분기를 삭제합니다. 예 : feature / *
git branch -D $ (git branch –list ‘feature / *’)
git branch -D backticks $ (git branch –list ‘feature / *’ backticks )
- 접두사가있는 원격 지점을 나열합니다.
자식 분기 -r | grep -Eo ‘기능 /.*’
- 접두사가있는 원격 지점 삭제
자식 분기 -r | grep -Eo ‘기능 /.*’| xargs -I {} git push origin : {}
답변
grep :
git branch -r | grep -Eo 'PREFIX/.*' | xargs -i git push origin :{}
.
branch -r
쇼 origin/prefix/branchname
. 그래서 그것은 걸릴 것 prefix/branchname
입니다.
답변
Neevek의 솔루션은 우아하지만 더 나을 수 있습니다. 제안 된 솔루션은 분기당 한 번 ‘git push’를 호출하므로 삭제할 분기당 추가 네트워크 왕복이 필요합니다. 어쨌든 awk를 사용하고 있기 때문에 ‘:’접두사에 awk를 사용하면 xargs가 정확히 한 번 ‘git push’를 호출하고 모든 분기를 한 번에 삭제할 수 있습니다.
삭제 될 분기를 나열하려면 테스트 실행 :
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}'
실제로 삭제를 푸시하는 최종 솔루션 :
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}' | xargs git push origin
답변
리소스 https://coderwall.com/p/eis0ba
1 - List all your remote branches:
$ git branch -r
2 - Filter the branches by some regular expression. In this case I'm interested in deleting any branch with the 'feature-' prefix:
$ git branch -r | awk -F/ '/\/feature-/{print $2}'
3 - Pipe the last command to git push to delete them:
# **Edit** - Removed extra colon, which is not needed
$ git branch -r | awk -F/ '/\/feature-/{print $2}' | xargs -I {} git push origin {}
4 - Grab a beer.
5 - Remove any local reference to those branches:
$ git remote prune origin