DOG FOOT

[git] branch 명령어로 로컬 브랜치 한 번에 정리하기 본문

개발새발/Git

[git] branch 명령어로 로컬 브랜치 한 번에 정리하기

퀸디 2025. 1. 10. 21:54

가끔 개발을 하다보면 로컬 브랜치가 손쓸 수 없을만큼 많아지는 경험, 해본 적 있으신가요?

로컬 브랜치 상태를 원격과 동일하게 늘 맞춰주지 않으면 로컬에 이미 병합되어버린 브랜치들이 남아있는데요.

저는 귀찮을 때마다 아래 명령어로 브랜치를 정리합니다.

TL;DR

로컬에 있는 모든 브랜치를 제거하고 싶다면 아래 커맨드를 입력해주세요.

*주의) force는 병합되지 않은 브랜치도 지워버리므로 조심히 사용하세요.

git branch | grep -v '^*' | xargs git branch -d --force

커맨드 자세히 알아보기

먼저 git branch 커맨드입니다.

git branch

// 예시 출력
// * main
// feature-1
// feature-2

 

현재 Git 저장소에 존재하는 모든 로컬 브랜치의 목록을 출력합니다.

체크아웃된 브랜치 앞에는 *로 표시됩니다.

 

하지만 현재 체크아웃된 브랜치를 지워버리면 문제가 되겠죠?

grep -v '^*'

// feature-1
// feature-2

 

그래서 grep 을 사용합니다.

grep은 주어진 패턴과 일치하는 텍스트를 필터링하는 명령입니다.


-v 옵션은 패턴과 일치하지 않는 행만 출력합니다.
'^*'는 정규식으로, 줄의 시작(^)에 *가 있는 경우를 의미합니다. 즉, 현재 체크아웃된 브랜치입니다.
즉, 체크아웃된 브랜치를 제외한 브랜치 이름만 출력하게 됩니다.

 

xargs

xargs는 이전 명령의 출력 결과를 인수로 전달해서 이후 커맨드를 실행합니다.

 

git branch -d

 

git branch 커맨드에 -d 옵션을 주게 되면 브랜치를 삭제합니다.

이 때, 병합되지 않은 브랜치는 삭제할 수 없기 때문에 로컬의 모든 브랜치를 정리하고 싶다면 --force 옵션을 추가합니다.

 

모든 명령어를 조합하면 로컬 브랜치를 정리할 수 있게 됩니다.

git branch | grep -v '^*' | xargs git branch -d

// 로컬에 main(체크아웃), feature-1, feature-2 브랜치가 있는 경우
// 아래 커맨드를 직접 입력하는 것과 같은 효과
// git branch -d --force feature-1
// git branch -d --force feature-2

 

실수로 중요한 브랜치를 삭제하지 않도록 삭제 전에 브랜치 상태를 확인하며 force 옵션을 적절히 사용하면 좋아요.

 

끝!