개발

git gone 원격에서 삭제된 로컬 브랜치들을 한번에 삭제하는 방법

동고킴 2022. 12. 10. 17:20
반응형

git gone 명령어를 만들어서 로컬 브랜치들 정리해보자

보통 이미 반영 또는 머지된 원격(remote) 브랜치들은 삭제된다. 하지만 그 브랜치들을 체크아웃(checkout)한 로컬 브랜치들은 여전히 우리 로컬에 존재한다. 이 브랜치들을 정리하지 않으면 로컬에 무수히 많은 브랜치들이 남게 되는데 이 브랜치들을 편하게 삭제할 수 있는 방법이 있다.

트래킹하는 원격 브랜치가 없는 로컬 브랜치는 지워지지 않으니 안심하고 사용해도 된다.

 

git gone 명령어를 새로 만들 거다. git config 명령어를 통해 바로 등록해도 alias를 등록해도 되고, gitconfig 파일을 열어서 직접 입력해도 된다.

방법 1) config 명령어로 바로 등록

git config --global alias.gone "! git fetch -p && git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '\$2 == \"[gone]\" {print \$1}' | xargs -r git branch -D"

방법 2). gitconfig 파일 열어서 등록

[alias]
  gone = ! "git fetch -p && git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '$2 == \"[gone]\" {print $1}' | xargs -r git branch -D"


git gone 명령어 설명

git gone 명령어는 트래킹 하는 원격 브랜치가 삭제되면 로컬에서 해당 브랜치의 상태가 [gone]으로 변한다는 점을 이용한다.

 

  1. git fetch -p : 원격 브랜치가 삭제된 로컬 브랜치들의 상태를 갱신한다. 이때 상태가 [gone]으로 변한다. git prune 명령어는 unreachable 한 git object들을 로컬에서 정리하는 작업이다.
  2. git for-each-ref : 쉽게 생각해서 반복문이다. 업스트림(upstream) 브랜치이고 상태가 gone인 로컬 브랜치를 조회한다.
  3. 브랜치명을 파라미터로 받아 브랜치를 삭제한다.
  4. 트래킹하는 원격 브랜치가 없는 로컬 브랜치는 지워지지 않으니 안심하고 사용해도 된다.

이제 git gone 명령어로 쉽게 로컬 브랜치들을 정리하면 된다.

 

참고

https://www.erikschierboom.com/2020/02/17/cleaning-up-local-git-branches-deleted-on-a-remote/

반응형