[git] 원격 저장소에서 삭제된 브랜치 로컬에도 반영하기

원격 저장소에서 삭제된 브랜치 로컬에도 반영하기

원격에 있는 브랜치는 원격 브랜치 삭제하기 에 있는 명령어로 제거가 가능하다. 특히, 로컬에도 있고 원격에도 있는 브랜치는 로컬에서 제거하고 원격에 push 해주기 때문에 로컬과 원격 동시에 제거되지만 원격 브랜치에만 존재하는 브랜치는 위 링크에 있는 원격 브랜치만 제거하는 명령어를 사용했을 떄, github 페이지에서는 사라지지만 로컬의 log에는 남아 있는 상황이 발생했다.

이런 경우 fetch 할 때 --prune 옵션을 사용하면 리모트 저장소에 제거된 브랜치 정보도 함께 가져온다.

# While fetching
$ git fetch --prune <name>

# Only prune, don't fetch
$ git remote prune <name>

이 옵션은 fetch 전에 원격에서 더이상 존재하지 않는 참조들을 제거해준다. Git은 명시적으로 제거하지 않는한 데이터를 유지하는 기본 처리 방식을 가지고 있기 때문에, 원격에서 제거된 브랜치더라도 로컬에는 유지되는 현상이 발생한다. 이러한 참조들이 누적되면 크고 작업량이 많은 저장소의 성능이 저장되거나, branch의 정보가 불필요하게 자세하게 나타나게되어 다른 것들에도 영향을 미치게 된다.

fetchl.prune을 전역에 설정하면, 매번 위와같은 명령어를 작성하지 않아도 된다.

만약 tag 기능을 복합적으로 사용할 경우, prune 은 원격 태그를 가져오면서 로컬에 있는 모든 태그를 삭제한다고 한다. 이 경우 원치 않는 결과가 발생할 수 있으니 tag 를 사용하고 있을 땐 주의해야한다.