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}'

답변

예를 들어 더 간단한 방법을 원한다면 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 :{}

답변

이것은 중복 답변 일 수 있지만 아래에서 테스트되어 완벽하게 작동했습니다.

  1. 로컬 브랜치를 강제 삭제

git branch -D branch-name

  1. 원격 지점 삭제

git push origin –delete branch-name

  1. 2 개 이상의 로컬 브랜치 삭제

git branch -D branch-name1 branch-name2

  1. 둘 이상의 원격 지점 삭제

git push origin –delete branch-name1 branch-name2

  1. 접두사가있는 로컬 분기를 삭제합니다. 예 : feature / *

git branch -D $ (git branch –list ‘feature / *’)

git branch -D backticks $ (git branch –list ‘feature / *’ backticks )

  1. 접두사가있는 원격 지점을 나열합니다.

자식 분기 -r | grep -Eo ‘기능 /.*’

  1. 접두사가있는 원격 지점 삭제

자식 분기 -r | grep -Eo ‘기능 /.*’| xargs -I {} git push origin : {}


답변

grep :
git branch -r | grep -Eo 'PREFIX/.*' | xargs -i git push origin :{}.

branch -rorigin/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