본문 바로가기

개발/GIT

Git 팁 : 안쓰는 로컬 브랜치 간단 정리

쓰지않는 로컬 브랜치를 깔끔하게 정리할 수 있을까?

오늘 오랜만에 git 브랜치를 보니 너무 ... 너무 많았다.
이게 뭐하는데 썻던 브랜치인지 몰라서 일일히 안쓰는 브랜치 찾아서 git branch -d 따다다 로 지우려고 하니 이것도 한두개지 귀찮기만 하다.

그래서 깔끔하게 정리하는 게 없나 찾아보던 중에 다음 커맨드를 찾게 되어 정리해본다.

$ git branch | wc -l
205

# *magic*

$ git branch | wc -l
56

 /*magic*/ 이 중요! 아래에 상세하게 정리

먼저 remote 브랜치 부터 정리한다

$ git remote prune origin

그리고 아래 command 를 쓴다.

$ git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}' | xargs git branch -D

그럼 깔끔하게 정리되는 브랜치를 보게된다. 끝.


이제 커맨드 각각을 분석해 보자

git remote prune origin

원격 저장소(remote/)에서 삭제된 브랜치를 origin/ 에서 모두 삭제한다. 아직 local 브랜치는 삭제되지 않은 상태이다.

git branch -vv

local 브랜치 목록을 일부 추가 정보를 포함해서 모두 보여준다.

//...  
feature/some-local-only-feature cba8191 Some commit message  
feature/some-old-feature cba2191 \[origin/feature/some-old-feature: gone\] Some commit message about some old feature  
feature/some-active-feature wba2191 \[origin/feature/some-active-feature: ahead 40, behind 10\] Some active feature branch
//...

git branch -vv | grep 'origin/.*: gone]'

브랜치 목록에서 정규식을 통과하는 것들로만 필터링 한다.
딱봐도 :gone 이 삭제된 origin 을 참조하는 브래치인 것으로 보인다.

//...  
feature/some-old-feature cba2191 \[origin/feature/some-old-feature: gone\] Some commit message about some old feature
//...

git branch -vv | grep 'origin/.*: gone]' | awk '{pring $1}'

필터링된 리스트에서 브랜치 이름만 뽑는다.
awk 는 라인별로 공백 또는 탭을 기준으로 word 를 분리해 내어 $1 부터 시작하는 각각의 필드 변수에 저장하는 리눅스 명령어이다.
$1 : feature/some-old-feature
$2 : cba2191
$3 : [origin/feature/some-old-feature:
$4 : gone]
$5 : Some
...

//...  
feature/some-old-feature
//...  

git branch -vv | grep 'origin/.*: gone]' | awk '{pring $1}' | xargs git branch -D

이제 브랜치를 삭제한다.
xargs 는 출력된 결과를 인자로 이용하여 커맨드를 사용하는 명령어이다.
변환하면 이렇게 되겠지.

git branch -D feature/some-old-feature

참고로 -D 는 강제 삭제 옵션이고 -d 는 그냥 삭제옵션 이다.

'개발 > GIT' 카테고리의 다른 글

Git 팁 : 안쓰는 로컬 브랜치 간단 정리  (0) 2019.09.18