본문 바로가기
Git

[Git] 로컬 branch 정리하는 방법

by 노력남자 2023. 4. 27.
반응형

이번 포스팅에선 로컬 branch를 정리하는 방법에 대해 알아보겠다.

 

로컬 branch가 지저분해지는 원인과 이걸 정리하는 방법에 대해 알아보겠다.

 

원인

 

우리 프로젝트는 pr이 merge되는 순간 branch를 지우고 있다.

 

원격 branch는 지워졌는데 로컬엔 해당 branch가 계속 남아있어서 보기 지저분했다.

 

예)

 

로컬 branch: branch1, branch2, branch3

원격 branch: branch1(지워짐), branch2, branch3

 

해결책

 

원격 branch에는 없는데 로컬 branch에는 있는 branch를 제거하는 명령어를 만들면 해결할 수 있다.

 

Mac

 

git fetch --prune && git branch -vv | grep ': gone]'|  awk '{print $1}' | xargs git branch -D

 

  1. git fetch --prune: 로컬 브랜치와 원격 브랜치를 동기화합니다. --prune 옵션을 사용하여, 로컬 브랜치와 원격 브랜치 간에 연결이 끊긴 경우 삭제합니다.
  2. git branch -vv: 로컬 브랜치의 목록을 출력합니다. -vv 옵션을 사용하여, 각 브랜치가 마지막으로 언제 업데이트되었는지, 그리고 해당 브랜치가 어떤 원격 브랜치를 추적하고 있는지를 확인할 수 있습니다.
  3. grep ': gone]': : gone]이라는 문자열을 포함하는 로컬 브랜치만을 출력합니다. 이는 로컬 브랜치가 원격 브랜치와의 연결이 끊어진 경우에 해당합니다.
  4. awk '{print $1}': 출력된 각 로컬 브랜치의 첫 번째 열(브랜치 이름)만을 추출하여 출력합니다. 이 때 awk 명령어를 사용하며, {print $1}은 첫 번째 열을 출력하는 명령입니다.
  5. xargs git branch -D: 추출된 각 로컬 브랜치를 git branch -D 명령으로 삭제합니다. 이 때 xargs 명령어를 사용하여, 앞서 추출된 브랜치 이름을 git branch -D 명령어의 인자로 전달합니다. git branch -D 명령어는 강제로 해당 브랜치를 삭제합니다.

 

Windows

 

git fetch --prune ; git branch -vv | Select-String -Pattern ': gone]' | ForEach-Object { git branch -D $_.ToString().Trim().Split()[0] }

 

  1. git fetch --prune: 로컬 브랜치와 원격 브랜치를 동기화합니다. --prune 옵션을 사용하여, 로컬 브랜치와 원격 브랜치 간에 연결이 끊긴 경우 삭제합니다.
  2. git branch -vv: 로컬 브랜치의 목록을 출력합니다. -vv 옵션을 사용하여, 각 브랜치가 마지막으로 언제 업데이트되었는지, 그리고 해당 브랜치가 어떤 원격 브랜치를 추적하고 있는지를 확인할 수 있습니다.
  3. Select-String -Pattern ': gone]': : gone]이라는 문자열을 포함하는 로컬 브랜치만을 선택합니다. 이는 로컬 브랜치가 원격 브랜치와의 연결이 끊어진 경우에 해당합니다. 이 부분은 PowerShell에서 사용하는 명령어로, 리눅스의 grep 명령어와 같은 역할을 합니다.
  4. ForEach-Object { git branch -D $_.ToString().Trim().Split()[0] }: 선택된 각 로컬 브랜치를 git branch -D 명령으로 삭제합니다. 이 때 ForEach-Object 명령어를 사용하여, 앞서 선택된 브랜치 이름을 git branch -D 명령어의 인자로 전달합니다. 이 부분은 PowerShell에서 사용하는 명령어입니다. 선택된 브랜치 이름을 문자열로 변환하고, 불필요한 공백 문자열을 제거한 후, 첫 번째 단어(즉, 브랜치 이름)만을 추출하여 git branch -D 명령어의 인자로 전달합니다.

 

주의사항

 

원격 branch에 push하지 않고 로컬 branch에만 적용한 코드가 있을 수 있다.

 

이걸 꼭 확인해보고 위 명령어를 사용하자.

반응형

댓글