최근에 작업하면서 로컬 브랜치를 정리했는데, git branch 명령어로 확인하면 사라진 브랜치들이 git checkout 시 자동완성(Tab)에서 계속 나타나는 문제가 발생했다.
git branch를 실행하면 현재 존재하는 브랜치는 아래와 같음:feat/push-alarm-message
feat/push-notification-api
feat/social-login
fix/edit-match
* maingit checkout fix/ 상태에서 Tab 키를 누르면 이미 삭제한 브랜치도 자동완성 목록에 나타남:fix/edit-match -- WIP: Edit match logic in progress
fix/cyw fix/match-screen-location-filter
fix/edit-match fix/profile-auth-handling
fix/login-handler fix/signup-modal-navigation
fix/match-list-improvements → fix/login-handler, fix/signup-modal-navigation 등은 이미 삭제한 브랜치인데 여전히 자동완성에 등장함.이유가 뭘까?
자동완성에만 남아있는 브랜치는 실제로 존재하는 로컬 브랜치가 아니라 Git의 캐시 또는 원격 추적 브랜치 정보에서 불러오는 것일 가능성이 크다.
먼저, git fetch --prune을 실행해서 원격에는 없지만 로컬에 남아 있는 원격 추적 브랜치 정보를 삭제한다.
git fetch --prune
📌 이 명령어는?
git fetch → 원격 저장소에서 최신 정보를 가져옴--prune → 더 이상 원격에 존재하지 않는 브랜치의 로컬 추적 정보를 삭제함이 명령어 실행 후, 다시 git checkout fix/에서 Tab을 눌러서 확인해보자. 만약 여전히 삭제한 브랜치가 자동완성에 남아 있다면, 다음 방법으로 진행해야 한다.
자동완성에만 남아있는 브랜치는 Git의 참조 로그(reflog) 에 기록이 남아 있어서 계속 나타날 수 있다. 이를 완전히 정리하려면 다음 명령어를 실행한다.
git reflog expire --all --expire=now && git gc --prune=now
📌 이 명령어는?
git reflog expire --all --expire=now → 모든 참조 로그를 즉시 만료 처리git gc --prune=now → 불필요한 Git 데이터를 정리하는 가비지 컬렉션(Garbage Collection) 실행🚨 주의:
이 명령어를 실행하면 최근에 삭제한 브랜치의 복구가 어려울 수 있다. 만약 브랜치를 실수로 삭제했다면 이 명령어를 실행하기 전에 다시 생성할 것.
1️⃣ git fetch --prune으로 원격 추적 브랜치 정보 정리 🔄
2️⃣ 그래도 자동완성에서 사라지지 않으면 git reflog expire --all --expire=now && git gc --prune=now 실행 ⚙️
이제 git checkout 시 자동완성에 유령 브랜치가 뜨지 않을 것이다! 🚀