Git의 모든 로컬 브랜치 삭제
-
master
를 제외한 Git의 모든 로컬 분기를 삭제하는 자세한 스크립트 -
Git에서
-d
옵션을 사용하여 병합된 분기만 삭제하도록 스크립트 수정 - 더 쉬운 스크립트를 사용하여 Git의 모든 로컬 분기 삭제
-
Git의
master-prod
와 같이master
와 유사한 이름을 가진 로컬 분기를 삭제하도록 스크립트 수정 - Git의 모든 로컬 분기를 삭제하는 짧은 스크립트
- Git의 모든 로컬 분기를 삭제하는 한 줄 영구 삭제 명령
오래된 로컬 브랜치는 로컬 저장소를 어지럽히지만 더 이상의 가치는 제공하지 않습니다. 이 튜토리얼의 도움으로 모든 로컬 브랜치를 한 번에 삭제할 수 있습니다.
grep
, xargs
및 for-each-ref
와 같은 명령을 사용하여 이 작업에 대한 스크립트를 작성합니다. 다양한 사용 사례에 대한 다양한 옵션을 보여줍니다.
또한 튜토리얼이 끝날 때 모든 로컬 분기를 삭제하는 한 줄 빠른 해킹을 제공합니다.
master
를 제외한 Git의 모든 로컬 분기를 삭제하는 자세한 스크립트
Git이 master
브랜치를 제외한 모든 로컬 브랜치를 삭제하도록 다음 스크립트를 작성합니다.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -D
이 스크립트는 병합되지 않은 분기를 포함하여 master
분기를 제외한 모든 로컬 분기를 삭제합니다.
이 스크립트를 분석하여 작동 방식을 살펴보겠습니다.
-
for-each-ref
는 리포지토리의 모든 참조를 반복합니다.format
문자열'%refname:short'
는 iterables에서 짧은 참조 이름을 추출하고refs/heads
는heads
를 가리킵니다.우리는 파이프
|
연산자를 사용하여for-each-ref
의 출력을grep
명령으로 전달한다. -
grep
명령은 표현식 문자열master\|main\|develop
과 일치시키기 위해 전달된 참조 헤드를 검색합니다. 여기에는master
브랜치의 다른 이름이 포함됩니다. 이름을main
또는develop
으로 지정했을 수 있습니다. -
grep
명령의-v
옵션은 반전 선택을 위한 것입니다. 따라서master\|main\|develop
표현과 일치하지 않는 것보다 여기에서 해당 분기만 선택합니다. 본질적으로master
를 제외한 모든 로컬 분기를 선택합니다. -
마지막으로
xargs
명령은 선택한 모든 분기를 가져와git branch -D
명령에 인수로 전달합니다.git branch -D
는 인수로 전달된 모든 분기를 강제로 삭제하는 명령입니다.
Git에서 -d
옵션을 사용하여 병합된 분기만 삭제하도록 스크립트 수정
위의 스크립트를 수정하여 병합된 분기만 삭제할 수 있습니다. 끝에 있는 -D
옵션을 -d
옵션으로 바꿉니다.
-d
는 일시 삭제 옵션이며 병합된 분기만 제거합니다.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -d
first_branch
는 병합되었지만 second_branch
는 병합되지 않았습니다.
수정된 스크립트는 병합된 first_branch
만 삭제하고 병합되지 않은 second_branch
는 남깁니다.
더 쉬운 스크립트를 사용하여 Git의 모든 로컬 분기 삭제
어떤 사람들은 위의 스크립트가 너무 복잡하고 과하다고 생각할 수 있습니다. 더 쉬운 스크립트를 사용하여 동일한 작업을 수행할 수 있습니다.
git branch | grep -v "master\|main\|develop" | xargs git branch -D
이 스크립트는 복잡한 for-each-ref
를 간단한 git branch
명령으로 바꿉니다.
Git은 스크립트에서 git branch
를 사용하는 것을 권장하지 않습니다. 그러나 빠른 솔루션을 위해 때때로 모범 사례에서 벗어날 수 있습니다.
Git의 master-prod
와 같이 master
와 유사한 이름을 가진 로컬 분기를 삭제하도록 스크립트 수정
때로는 저장소에 master
와 유사한 이름을 가진 분기가 있을 수 있습니다. 예를 들어, 일부 브랜치는 master-prod
또는 master-draft
와 같은 이름을 가질 수 있습니다.
스크립트의 정규식을 "master\|main\|develop"
에서 "master$\|main$\|develop$"
으로 수정하여 이 기능을 구현할 수 있습니다.
git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D
Git의 모든 로컬 분기를 삭제하는 짧은 스크립트
영리한 정규 표현식을 grep
에 전달하여 스크립트를 더 줄일 수 있습니다.
git checkout master
git branch | grep -v "^*" |xargs git branch -D
"^*"
표현은 현재 분기(*
)로 시작하는 모든 분기(^
)를 의미합니다. 먼저 git checkout master
를 수행했으므로 현재 분기는 master
입니다.
따라서 -v "^*"
는 현재 분기인 master
를 필터링하고 다른 모든 로컬 분기를 삭제합니다.
Git의 모든 로컬 분기를 삭제하는 한 줄 영구 삭제 명령
마지막으로 약속한 대로 Git의 모든 로컬 분기를 삭제하는 한 줄 영구 삭제 명령을 보여 드리겠습니다.
git branch -D $(git branch)
이 명령은 현재 있는 분기를 제외한 모든 분기를 삭제합니다.