본문 바로가기
IT

Git으로 이미 추가된 ignored 파일 제거하기 - 왜 .gitignore를 만들어도 계속 추적될까요?

by Yong Dae 2025. 9. 2.
반응형

.gitignore에 추가했는데 왜 계속 추적되지?

며칠 전, 프로젝트에서 환경 설정 파일을 .gitignore에 추가했다. "이제 더 이상 추적되지 않겠지"라고 생각하며 git status를 실행했는데, 여전히 수정된 파일 목록에 떠 있는 것이 아닌가. 분명 .gitignore에 정확히 추가했는데 말이다.

그때 깨달았다. .gitignore는 앞으로 추가될 파일들만 무시하는 것이고, 이미 Git이 추적하고 있는 파일들은 계속 추적한다는 사실을. 마치 이미 친구가 된 사람을 차단 목록에 추가해도 이미 맺어진 관계는 끊어지지 않는 것처럼.

Git의 추적 메커니즘 이해하기

Git은 한 번 추적을 시작한 파일에 대해서는 매우 집요하다. .gitignore에 추가한다고 해서 기존의 추적 관계가 자동으로 해제되는 것이 아니다. 이는 Git의 설계 철학과도 관련이 있다. 실수로 중요한 파일을 .gitignore에 추가해도 기존 이력이 사라지지 않도록 하는 안전장치인 셈이다.

하지만 때로는 이미 추적 중인 파일을 정말로 무시하고 싶을 때가 있다. 특히 다음과 같은 상황에서 말이다:

  • 개발 초기에 실수로 환경 설정 파일이나 빌드 결과물을 커밋한 경우
  • 로그 파일이나 임시 파일들이 추적되고 있는 경우
  • 민감한 정보가 포함된 파일을 나중에 발견한 경우

이럴 때 필요한 것이 바로 git rm --cached 명령어다.

git rm --cached의 마법

git rm --cached 명령어는 Git의 추적 목록(인덱스)에서는 파일을 제거하지만, 실제 작업 디렉토리의 파일은 그대로 둔다. 마치 감시 목록에서는 빼지만 실제로는 건드리지 않는 것과 같다.

단일 파일 제거하기

특정 파일 하나만 추적에서 제외하고 싶다면:

# .gitignore에 파일 추가 (아직 추가하지 않았다면)
echo "config.json" >> .gitignore

# Git 추적에서 제거 (파일은 유지)
git rm --cached config.json

# 변경사항 커밋
git commit -m "Stop tracking config.json"

패턴으로 여러 파일 제거하기

특정 패턴에 맞는 여러 파일을 한 번에 제거하려면:

# 모든 .log 파일을 .gitignore에 추가
echo "*.log" >> .gitignore

# 패턴에 맞는 파일들을 추적에서 제거
git rm --cached *.log

# 변경사항 커밋
git commit -m "Stop tracking all log files"

전체 재정리: 완전 초기화 방법

프로젝트 전체를 깔끔하게 정리하고 싶다면, 제시된 명령어를 사용할 수 있다:

# 모든 파일을 추적에서 제거
git rm --cached -r .

# .gitignore 설정에 따라 다시 추가
git add .

# 변경사항 커밋
git commit -m "Refresh tracking based on .gitignore"

이 방법은 현재 .gitignore에 정의된 규칙에 따라 모든 파일의 추적 상태를 재설정한다.

주의사항과 팀 작업 고려사항

--cached 옵션의 중요성

--cached 옵션을 빼먹으면 Git은 파일을 인덱스와 작업 디렉토리에서 모두 삭제한다. 즉, 파일 자체가 사라져버린다. 반드시 --cached 옵션을 사용해야 한다.

팀 작업에서의 영향

이 작업을 수행한 후 다른 팀원들이 pull을 받으면, 해당 파일들이 그들의 로컬에서는 삭제될 수 있다. 따라서 팀원들에게 미리 알리고, 필요하다면 백업을 받아두도록 안내하는 것이 좋다.

민감한 정보가 포함된 경우

이미 원격 저장소에 푸시된 민감한 정보는 git rm --cached만으로는 완전히 제거되지 않는다. Git 히스토리에는 여전히 남아있기 때문이다. 이런 경우에는 git filter-branch나 BFG Repo-Cleaner 같은 도구를 사용해야 한다.

더 나은 워크플로를 위한 팁

프로젝트 시작 시점의 준비

새 프로젝트를 시작할 때는 첫 커밋 전에 적절한 .gitignore 파일을 준비하는 것이 가장 좋다. 각 언어와 프레임워크별로 표준 .gitignore 템플릿을 활용하자.

정기적인 점검

가끔씩 git status로 추적되고 있는 파일 목록을 확인해보자. 의도치 않게 추적되고 있는 파일들을 발견할 수 있다.

IDE와 에디터 설정

대부분의 현대적인 IDE들은 .gitignore 파일을 인식하고 시각적으로 표시해준다. 이를 활용하면 실수를 줄일 수 있다.

깔끔한 저장소를 향한 여정

Git으로 이미 추적 중인 파일을 제거하는 것은 단순해 보이지만, 실제로는 꽤 신중하게 접근해야 하는 작업이다. 특히 팀 프로젝트에서는 더욱 그렇다.

하지만 한 번 제대로 정리해두면, 앞으로의 개발 과정이 훨씬 깔끔해진다. 불필요한 파일들로 인한 컨플릭트도 줄어들고, 저장소의 크기도 적절히 유지할 수 있다. git rm --cached는 그런 깔끔한 저장소를 만들어가는 과정에서 꼭 알아야 할 도구 중 하나다.

완벽한 .gitignore 설정은 없지만, 지속적으로 개선해나가는 과정에서 더 나은 개발 환경을 만들 수 있다고 믿는다.

반응형