본문 바로가기
IT/Git

자꾸 감시당하는 설정 파일? / git rm --cached 사용법 정리

by 하루 또다시 하루 2026. 5. 30.
반응형

.gitignore 적용이 안 될 때, 이미 추적 중인 파일부터 해결하는 4단계 복구법

프로젝트에 비밀번호나 API 키가 담긴 환경 설정 파일(.env), 혹은 수시로 바뀌는 로그 파일(.log)을 제외하려고 뒤늦게 .gitignore에 등록하는 경우가 많습니다. 하지만 분명히 무시하라고 적어두었는데도 자꾸 Git 변경 사항(git status)에 파일이 잡혀 곤혹스러우셨을 텐데요.

결론부터 말씀드리면, .gitignore는 Git이 아직 추적하지 않은 파일만 무시할 수 있는 설정입니다. 이미 이전에 한 번이라도 git add 되었거나 커밋되어 Git 장부에 등록된 파일은 .gitignore에 백날 적어두어도 자동으로 제외되지 않습니다. 내 로컬에 있는 소중한 파일은 그대로 살려두면서, Git의 추적 장부에서만 안전하게 지워내는 실전 대처 순서를 정리했습니다.

자주 보이는 증상

  • .gitignore 파일에 경로를 바르게 적었는데도 변경 파일 목록에 계속 나타남
  • IDE 설정 파일(.idea, .vscode)이나 로컬 설정 파일(application-local.yml)이 나를 따라다니며 커밋 대상에 포함됨
  • 원격 저장소(GitHub)를 확인해 보니 올리면 안 되는 빌드 결과물(dist/, build/) 폴더가 이미 떡하니 올라가 있음

왜 이런 문제가 생길까

1) Git의 '선취권' 원칙 (이미 추적 중인 상태)

Git은 한 번 관리하기 시작한 파일에 대해 강한 집착을 가집니다. 파일이 이미 최초의 커밋 히스토리에 포함되어 있다면, Git은 이 파일을 '매우 중요한 추적 대상'으로 간주합니다. 이 상태에서는 .gitignore 규칙보다 기존 장부의 추적 상태가 우선하기 때문에 무시 규칙이 무용지물이 됩니다.

2) 잘못 작성된 규칙 패턴

드물게 이미 추적 중인 문제가 아니라, 경로 패턴을 잘못 적어서 적용이 안 되는 경우도 있습니다. 폴더 전체를 제외해야 하는데 슬래시(/)를 빼먹었거나, 하위 폴더 구조를 고려하지 않고 파일명만 적었을 때 Git이 규칙을 알아채지 못하고 그대로 추적을 진행합니다.

.gitignore 적용 안 됨 해결 방법

1단계. 가장 먼저 확인할 부분: Git의 추적 상태 실시간 진단

  • 무엇을 확인하는지: 터미널에 git ls-files [파일명]을 입력해 봅니다. 혹은 이 파일이 어떤 규칙 때문에 무시당하고 있는지(혹은 안 당하고 있는지) git check-ignore -v [파일명]으로 진단합니다.
  • 왜 먼저 확인해야 하는지: 해당 파일이 이미 Git의 감시망에 들어와 있는지, 아니면 규칙 자체가 틀린 것인지 원인을 정확히 반으로 쪼개어 파악하기 위함입니다.
  • 확인 후 어떻게 판단하는지: git ls-files를 쳤을 때 파일 경로가 화면에 출력된다면, 규칙 오류가 아니라 이미 Git이 추적 중인 상태가 확실하므로 다음 3단계(캐시 삭제)로 바로 넘어가면 됩니다.

2단계. 다음 점검: 올바른 ignore 규칙 명시하기

  • 무엇을 확인하는지: .gitignore 파일을 열어 제외할 파일들의 패턴이 올바르게 적혔는지 검수합니다.
  • 왜 먼저 확인해야 하는지: 장부에서 지우기 전에, 앞으로 두 번 다시 Git이 이 파일을 가로채지 못하도록 명확한 바리케이드를 쳐두는 과정입니다.
  • 확인 후 어떻게 판단하는지: 프로젝트 상황에 맞게 규칙을 보정합니다.
    • 특정 폴더 전체 제외: logs/, dist/ (끝에 슬래시 필수)
    • 특정 확장자 전체 제외: *.log
    • 특정 환경 설정 파일 제외: .env, application-local.yml

3단계. 추가 조치: 파일은 살리고 Git 장부만 비우기 (--cached)

  • 무엇을 확인하는지: 터미널에 git rm --cached [파일명]을 입력합니다. 폴더 전체를 제외할 때는 git rm -r --cached [폴더명/]과 같이 -r 옵션을 반드시 붙여줍니다.
  • 왜 먼저 확인해야 하는지: 실무에서 가장 중요한 핵심 명령어입니다. 일반적인 git rm은 하드디스크의 실제 파일까지 싹 지워버리지만, --cached 옵션을 붙이면 실제 파일은 내 컴퓨터에 그대로 둔 채 Git의 인덱스(장부)에서만 해당 파일을 삭제합니다.
  • 확인 후 어떻게 판단하는지: 명령어 실행 후 코드 에디터를 보았을 때 파일은 그대로 남아있고, git status를 쳤을 때 해당 파일이 deleted: [파일명] 상태로 초록색으로 바뀐다면 장부에서만 깔끔하게 지워진 것입니다.

4단계. 그래도 안 되면 볼 부분: 변경 사항 최종 커밋 및 Push

  • 무엇을 확인하는지: git add .gitignore를 한 뒤, git commit -m "docs: 불필요한 추적 파일 gitignore 적용"으로 커밋을 남기고 원격 저장소에 push 합니다.
  • 왜 먼저 확인해야 하는지: "이 파일은 이제부터 우리 저장소에서 관리하지 않는다"는 장부의 수정 내역을 최종 확인 도장을 찍어 GitHub 서버에 동기화해야 전체 팀원들의 저장소에서도 해당 파일이 안전하게 제외되기 때문입니다.
  • 확인 후 어떻게 판단하는지: push 완료 후 다시 해당 파일을 수정하고 git status를 쳤을 때, 변경 사항에 아무것도 잡히지 않고 조용하다면 .gitignore가 완벽하게 먹혀들기 시작한 것입니다.

실전에서 자주 놓치는 부분

신입 개발자가 이 상황에서 가장 많이 하는 치명적인 실수는 마음이 급한 나머지 그냥 윈도우 탐색기를 열어 실제 설정 파일이나 로그 폴더를 냅다 마우스로 삭제(Delete)해 버리는 것입니다. 로컬 파일이 지워지면 프로젝트 빌드가 깨지거나 로컬 서버가 구동되지 않는 가혹한 부작용이 생깁니다. 우리는 파일 자체가 싫은 게 아니라 'Git이 감시하는 게' 싫은 것이므로, 반드시 --cached 옵션을 손에 익혀두어야 합니다.

또한 만약 .env 파일 등에 실제 운영 환경의 중요한 비밀번호나 결제 API Secret Key가 적힌 상태로 이미 GitHub 원격 저장소에 한 번이라도 push가 되었다면, 뒤늦게 git rm --cached로 지운다고 해도 과거 커밋 기록(History)을 뒤지면 누구나 키를 볼 수 있습니다. 깃허브에 노출된 민감 정보는 몇 초 만에 전 세계 봇(Bot)들이 긁어가므로, 이럴 때는 코드를 숨기는 것보다 해당 API 키를 즉시 폐기하고 재발급받는 것이 최우선입니다.

마무리

.gitignore가 작동하지 않을 때는 무작정 규칙만 새로 적지 말고, Git이 이미 추적 중인 상태인지 확인하는 것부터 시작하세요. 급하다면 다음 딱 3단계 순서만 실행하시면 됩니다.

  1. .gitignore 파일에 제외할 경로 및 확장자 규칙 정확히 적기
  2. git rm --cached 파일명 (폴더는 git rm -r --cached 폴더명/) 입력하여 장부만 지우기
  3. git add . 와 git commit을 거쳐 원격 저장소에 수정된 장부 push하기 이 흐름만 숙지하면 실제 파일이 삭제되는 사고 없이 안전하고 쾌적하게 파일 무시 설정을 적용할 수 있습니다.
반응형