개발/GIT
Git 팁 : 안쓰는 로컬 브랜치 간단 정리
까망군
2019. 9. 18. 12:42
쓰지않는 로컬 브랜치를 깔끔하게 정리할 수 있을까?
오늘 오랜만에 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 는 그냥 삭제옵션 이다.