Git 브랜치 자동완성에서 삭제된 브랜치가 계속 뜨는 문제 해결하기

oversleep·2025년 2월 25일

git

목록 보기
7/11
post-thumbnail

🧐 문제 상황

최근에 작업하면서 로컬 브랜치를 정리했는데, git branch 명령어로 확인하면 사라진 브랜치들이 git checkout 시 자동완성(Tab)에서 계속 나타나는 문제가 발생했다.

📌 증상

  1. git branch를 실행하면 현재 존재하는 브랜치는 아래와 같음:
    feat/push-alarm-message
    feat/push-notification-api
    feat/social-login
    fix/edit-match
    * main
  2. 하지만 git 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의 캐시 또는 원격 추적 브랜치 정보에서 불러오는 것일 가능성이 크다.

🛠 해결 방법

1️⃣ 원격 추적 브랜치 정리 (간단한 방법)

먼저, git fetch --prune을 실행해서 원격에는 없지만 로컬에 남아 있는 원격 추적 브랜치 정보를 삭제한다.

git fetch --prune

📌 이 명령어는?

  • git fetch → 원격 저장소에서 최신 정보를 가져옴
  • --prune → 더 이상 원격에 존재하지 않는 브랜치의 로컬 추적 정보를 삭제함

이 명령어 실행 후, 다시 git checkout fix/에서 Tab을 눌러서 확인해보자. 만약 여전히 삭제한 브랜치가 자동완성에 남아 있다면, 다음 방법으로 진행해야 한다.


2️⃣ Git 캐시된 브랜치 정보 완전히 삭제

자동완성에만 남아있는 브랜치는 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 시 자동완성에 유령 브랜치가 뜨지 않을 것이다! 🚀

profile
궁금한 것, 했던 것, 시행착오 그리고 기억하고 싶은 것들을 기록합니다.

0개의 댓글