Git의 모든 로컬 브랜치 삭제

Ankit Raj Goyal 2023년1월30일
  1. master를 제외한 Git의 모든 로컬 분기를 삭제하는 자세한 스크립트
  2. Git에서 -d 옵션을 사용하여 병합된 분기만 삭제하도록 스크립트 수정
  3. 더 쉬운 스크립트를 사용하여 Git의 모든 로컬 분기 삭제
  4. Git의 master-prod와 같이 master와 유사한 이름을 가진 로컬 분기를 삭제하도록 스크립트 수정
  5. Git의 모든 로컬 분기를 삭제하는 짧은 스크립트
  6. Git의 모든 로컬 분기를 삭제하는 한 줄 영구 삭제 명령
Git의 모든 로컬 브랜치 삭제

오래된 로컬 브랜치는 로컬 저장소를 어지럽히지만 더 이상의 가치는 제공하지 않습니다. 이 튜토리얼의 도움으로 모든 로컬 브랜치를 한 번에 삭제할 수 있습니다.

grep, xargsfor-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 분기를 제외한 모든 로컬 분기를 삭제합니다.

이 스크립트를 분석하여 작동 방식을 살펴보겠습니다.

  1. for-each-ref는 리포지토리의 모든 참조를 반복합니다. format 문자열 '%refname:short'는 iterables에서 짧은 참조 이름을 추출하고 refs/headsheads를 가리킵니다.

    우리는 파이프 | 연산자를 사용하여 for-each-ref의 출력을 grep 명령으로 전달한다.

  2. grep 명령은 표현식 문자열 master\|main\|develop과 일치시키기 위해 전달된 참조 헤드를 검색합니다. 여기에는 master 브랜치의 다른 이름이 포함됩니다. 이름을 main 또는 develop으로 지정했을 수 있습니다.

  3. grep 명령의 -v 옵션은 반전 선택을 위한 것입니다. 따라서 master\|main\|develop 표현과 일치하지 않는 것보다 여기에서 해당 분기만 선택합니다. 본질적으로 master를 제외한 모든 로컬 분기를 선택합니다.

  4. 마지막으로 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)

이 명령은 현재 있는 분기를 제외한 모든 분기를 삭제합니다.

한 줄 영구 삭제

관련 문장 - Git Branch