본문 바로가기

카테고리 없음

[git] 오류 해결 - git unable to delete remote ref does not exist

반응형

많은 개발자들이 협업을 하다 보면 git 의 브랜치가 정말 많이 쌓이게 됩니다. 주기적으로 정리를 해주면 좋겠지요..

로컬 브랜치야 개인이 알아서 정리해주면 되겠지만, remote branch는 별도로 관리하지 않으면 방치되는 경향이 있는 것 같습니다.

 

remote branch 를 정리하려고 아래와 같이 특정 브랜치 삭제 명령어를 실행했습니다.

(remote branch는 많으면 많기 때문에 보통 아래처럼 하나하나 개별 삭제하지는 않습니다. 패턴 등을 통해 일괄 삭제 처리하겠지만.. 아래는 예제를 위한 코드를 작성한 것입니다.)

$> git push origin --delete [BRANCH NAME]

 

위의 명령어는 remote 서버에 있는 특정 브랜치를 삭제하는 명령어 입니다.

그런데 위와 같은 오류가 발생합니다.

 

error: unable to delete [BRANCH NAME] : remote ref does not exist

 

'원격 서버에 참조하는(삭제하려는) 브랜치가 존재하지 않아 브랜치를 삭제할 수 없다는 말입니다.'

 

분명히 제 로컬 PC에는 위의 branch가 remote 서버에 있다고 나와있는데 말이지요.

아래는 remote(원격) 서버의 브랜치 정보를 확인하는 명령어입니다.

$> git branch -r // remote 서버 브랜치 정보 (내 로컬 PC에 기록되어 있는)

위의 명령어를 실행해보아도 분명히 remote 서버에 있는 브랜치인데도 말입니다. 

 

이유는 로컬PC에 기록되어 있는 remote(원격) 서버의 브랜치 정보와 실제 원격 서버의 브랜치 정보가 일치하지 않기 때문입니다. 로컬PC의 remote 서버 브랜치 정보가 실제 원격 서버와 동기화 된지 오래되었다면 이런 문제가 발생할 수 있습니다.

 

이런 경우는 fetch 명령어를 통해 실제 remote 서버의 브랜치 정보를 다시 가져와서 로컬PC의 정보를 갱신해 주어야 합니다. 아래 명령어를 한 번 실행해 주면 실제 원격 서버와 로컬 PC(에서 가지고 있는 원격 서버의 브랜치 정보)가 동기화 됩니다.

 

$> git fetch -p origin

 

다시, git branch -r 명령어를 통해 조회해 보면 아마 삭제에 실패했던 그 브랜치가 원격 서버에 없다는 것을 알 수 있습니다. (다른 누군가가 지웠거나 했겠지요?)

 

만약 git 관리를 소스트리(SourceTree)를 통해서 하고 계신다면 주기적으로 Fetch를 해주시면 됩니다.

 

하지만 Fetch 를 수행하게 되면 아래와 같이 옵션 창이 뜨는데, 'Prune tracking branches no longer present on remote(s)를 체크하시고, OK버튼을 클릭해주세요. 한번 체크해두면 계속해서 체크된 상태로 동작합니다.

위의 항목을 체크해야 git fetch -p origin 명령어에서 [-p] 옵션이 포함되어 실행됩니다. 더 이상 존재하지 않는 remote 브랜치 정보는 삭제해주는 것이지요. 위의 항목을 체크하지 않고 실행한다면 원격 서버에서 삭제된 브랜치가 있음에도 이 정보는 로컬PC에 전달되지 않습니다. 즉, 원격 서버에서 삭제된 브랜치들도 로컬PC에는 계속 남아있게 되고, 로컬 PC의 remote 브랜치 영역에 계속 쌓이게 됩니다.

 

반응형