사용하지 않는 Git 브랜치 청소하기

Jesang Yoon
HBsmith
Published in
3 min readOct 31, 2023

--

Git을 사용하다 보면, Remote와 Local에 사용하지 않는 브랜치가 다수 쌓이는 경우가 있다. 해당 브랜치가 어떤 작업이었는지 전부 다 기억한다면 괜찮겠지만, 일주일만 지나도 뭐였는지 까먹는 경우가 많을 것이다. 이런 브랜치가 쌓이면 브랜치를 잘못 머지하거나 삭제하는 실수가 생길 가능성도 높아진다. 이번 글에선 Remote와 Local을 어떻게 정리하면 좋은지 팁을 소개하겠다.

Remote 정리하기

GitHub에서 PR을 merge하면 해당 PR의 Remote 브랜치가 자동 삭제되도록 만들수 있다. 이를 이용하면 불필요한 브랜치가 늘어나는것을 줄일수 있다. 또한 Branches 화면에서 생성한지 오래된 브랜치들은 정기 업데이트 이후 주기적으로 확인하여 삭제하는걸 추천한다. 삭제하면 안되는 중요한 브랜치에만 delete protection을 걸고 나머지는 일괄 삭제하면 실수를 줄일수 있다.

GitHub 저장소에서 자동삭제 설정을 확인할수 있다.
delete protection을 걸어두면 본인 또는 팀원이 실수로 삭제하는걸 방지할수 있다.

Local 정리하기

1에서 소개한 merge된 브랜치의 자동삭제기능을 쓰면 local에 checkout 되었으나 remote가 사라진 브랜치들이 늘어날 것이다. 특별한 경우가 아니고선 remote가 이미 merge되었음으로 local 역시 필요없는 브랜치일 것이다. 이것들을 일괄 삭제시켜 주는 스크립트를 소개하겠다.

  1 #!/bin/bash
2
3 for i in */.git; do
4 echo
5 echo $i '--------------------------------'
6 cd $i/..
7 git status
8 git fetch --all -p
9 git pull --all
10 GONE_BRANCHES=`git branch -vv | grep gone | sed | awk '{print $1}' | tr '\n' ' '`
11 if [[ ${#GONE_BRANCHES} -gt 2 ]]; then
12 git branch -d $GONE_BRANCHES
13 fi
14 echo
15 git branch -a | cat
16 cd ..
17 done

위 스크립트는 저장소 폴더들을 돌아다니면서 pull을 한 후에, remote가 삭제된 브랜치들을 청소해 준다. 단, 실행하기 전에 해당 저장소들은 master로 checkout 되어 있어야 한다. 삭제후, 해당 저장소에 배치된 모든 local과 remote 브랜치들을 보여주는데 이 브랜치 중에 히스토리를 모르거나 불필요한 것만 수동으로 지워주면 되겠다.

나는 이 스크립트를 매일 업무 시작전에 한번씩 돌려보는데 휴먼에러를 줄이는데 많은 도움이 되었다.

--

--