실수로 150 개가 넘는 지역 지점을 중앙 저장소로 푸시 한 팀원이 있습니다. 고맙게도 그들은 모두 같은 접두사를 가지고 있습니다. 그 접두사를 사용하면 한 번에 모든 것을 삭제할 수있는 git 명령이나 멋진 작은 쉘 스크립트가 있습니까?
실수로 150 개가 넘는 지역 지점을 중앙 저장소로 푸시 한 팀원이 있습니다. 고맙게도 그들은 모두 같은 접두사를 가지고 있습니다. 그 접두사를 사용하면 한 번에 모든 것을 삭제할 수있는 git 명령이나 멋진 작은 쉘 스크립트가 있습니까?
답변:
다음 명령을 사용하여 PREFIX
원격 서버 에서 접두사가있는 모든 분기를 제거 합니다.
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
제거 할 분기인지 확인하기 위해 먼저 드라 이런을 수행 할 수 있습니다.
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
git branch -r | awk -F/ '/\/APR/{print $2}'
나열된 모든 APR 접두사 지점 이름을 볼 수 있습니까?
git branch -r | awk -F/ '/\/PREFIX/{print $2"/"$3}' | xargs -I % git push origin --delete %
예를 들어 더 간단한 방법을 원한다면 3 개 또는 4 개의 브랜치를 삭제하십시오.
git push origin --delete <branch1> <branch2> <branch3>
중요 : Git v1.7.0 이상 에서만 작동합니다 .
git branch -r | awk -F/ '/\/PATTERN/{print $2}' | xargs git push origin --delete
훌륭하고 우아한 솔루션에 대한 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 :{}
xargs -a file -L
대신에 cat file | xargs
. 더 간단 xargs -a file git push --delete origin
합니다.
이것은 중복 답변 일 수 있지만 아래에서 테스트되어 완벽하게 작동했습니다.
git branch -D branch-name
git push origin --delete branch-name
git branch -D branch-name1 branch-name2
git push origin --delete branch-name1 branch-name2
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
입니다.
xargs -I {} git push origin :{}
아니라고-i
.
-i
기본 대체를 사용 {}
하지만 -I
사용자가 직접 선언 할 수 있습니다. ... 매뉴얼에서 찾을 수 있습니다.-i ... the same as -I{}
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
xargs: replstr may not be empty
Neevek의 솔루션, 어쩌면 git 버전을 가지고 있었다. git version 1.9.5
그러나 이것은 나를 위해 잘 작동했다. 여러분 모두 감사합니다
리소스 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
Steve와 Neevek 덕분에 나에게 잘 맞는 솔루션을 찾았고 공유 할 가치가 있다고 생각했습니다.
Steve의 솔루션은 약간의 조정으로 나를 위해 일했습니다. 내 리모컨의 이름이 지정 origin/feature/some-feature-name
되었으므로 다음 항목을 다듬 었습니다 awk
.
git branch -r | awk -Forigin/ '/\/feature/ {print $2 $3}' | xargs -I {} git push origin :{}
이제 멋진 삭제 흐름을 수행하고 있습니다.
To github.com:project/project-name.git
- [deleted] feature/search-min-chars
To github.com:project/project-name.git
- [deleted] feature/search-placeholder
To github.com:project/project-name.git
- [deleted] feature/server-error-message
To github.com:project/project-name.git
- [deleted] feature/six-point-asterisk
누군가가 더 우아한 솔루션에 대한 아이디어를 가지고 있는지 궁금해하고 있었지만 다음과 같은 결과를 얻을 수 있습니다 (내 CLI 스크립팅은 매우 좋지 않으므로 이것을 알아내는 데 시간이 걸립니다).
git push origin :feature/search-min-chars :feature/search-placeholder :feature/server-error-message :feature/six-point-asterisk
이렇게하면 하나의 네트워크 요청으로 멋진 단일 출력이 생성됩니다.
To github.com:project/project-name.git
- [deleted] feature/search-min-chars
- [deleted] feature/search-placeholder
- [deleted] feature/server-error-message
- [deleted] feature/six-point-asterisk
Neevek에게 감사드립니다. 이것은 내 목적을 위해 재구성 한 후에 잘 작동했습니다.
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2 "/" $3}' | xargs -I {} git push origin :{}
또한 폴더 구조도 고려해야했습니다. 내 기능 분기는 origin / feature / PREFIX-FEATURENUMBER와 같은 폴더 구조에 있습니다. 그래서 저는 $ 2 = folder + $ 3 = branchname에서 패턴을 만들어야했습니다.
모두가을 사용 awk
하고 있지만 그 이유 는 확실하지 않습니다. 좀 더 복잡한 것 같아요. 내 fork
리모컨 에서 모든 원격 분기를 삭제하는 데 사용하는 방법은 다음과 같습니다 .
$ git branch -r --list 'fork/*' | sed 's/fork\///' | xargs git push --delete fork
목록을 원격 분기의 하위 집합으로 만 필터링해야하는 경우 와 grep
사이 에을 넣으십시오 .xargs
sed
origin/blaprefix_anotherbla
. 그러나 사용 sed
하면 잘 처리되었습니다. 이 접근 방식의 또 다른 장점은 bitbucket을 사용하고 모든 지점을 수동으로 삭제할 때마다 인증 암호를 입력 할 필요가 없다는 것입니다. 이것은 단일 배치에서 모든 분기를 삭제합니다.
git branch -r | egrep 'origin/greenkeeper' | sed 's/origin\///' | xargs -I {} git push origin --delete {}
나는 이것이 git 명령에 대한 것이라는 것을 알고 있지만 유사하거나 동일한 결과를 수행하는 대체 솔루션을 찾고 있다면 :
여기에서 할 수 있습니다 (Git Remove Remote Branches) :
그런 다음 원하는 분기를 선택하십시오.
원격 분기를 제거 할 수있는 권한이 있는지 확인하십시오.
Github에는 또한 분기를 빠르게 삭제하기위한 멋진 UI와 메커니즘이 있습니다. UI를 사용하려는 경우
브랜치 이름에 슬래시 구조를 사용하고 있기 때문에 awk를 사용할 수 없었습니다.
git branch -r | grep "origin/users/YOURNAME" | sed -r 's/^.{9}//'| xargs -i sh -c 'git push origin --delete {}'
이것은 모든 원격 분기를 가져오고 단일 사용자에 대해 하나만 가져오고 "origin /"문자열을 원격으로 가져 와서 각각에 대해 삭제를 실행합니다.
드라 이런 :
git branch -r --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} echo {}
원격 분기 삭제 :
git branch -r --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} git push origin --delete {}
완전히 병합 된 원격 분기 만 삭제 :
git branch -r --merged --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} git push origin --delete {}
설명:
sed "s/origin\///"
origin/
지점 이름에서 제거 됩니다. 그것을 벗기지 않고 나는 얻었습니다.remote ref does not exist
이전 답변은 2018의 모든 릴리스 분기를 제거하는 데 도움이되었습니다. Windows 10 명령 프롬프트에서 이것을 실행했습니다. 클 링크를 설치했습니다 했으므로 Linux와 같은 명령이 나를 위해 작동합니다.
드라 이런 :
git branch -a | grep -o "release-.*2018" | xargs -I {} echo {}
드라 이런에 원격 / 원점에없는 분기가 표시되는 경우. git prune 명령을 실행하여 수정하고 다시 확인하십시오.
git remote prune origin
위의 결과에 만족하면 삭제하십시오.
git branch -a | grep -o "release-.*2018" | xargs -I {} git push origin --delete {}
표시되는 경우 : error: unable to delete 'release-...2018': remote ref does not exist
. 그런 다음 이전 prune 명령을 실행하고 다시 시도하십시오.
원격 지점을 삭제하는 방법 이 최선 이라고 생각 합니다.
git branch -r | grep -v master | sed 's/origin\//:/'| xargs git push
$ git branch -r | awk -F/ '/\/APR/{print $2}' | xargs -I {} git push origin :{} error: unable to push to unqualified destination: APR-04-DPH The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'GIT_URL'