이미 커밋된 파일을 .gitignore로 무시하기
.gitignore에 추가해도 계속 추적되는 파일을 git rm --cached로 추적에서 빼는 방법, 무시 규칙에 걸리는 추적 파일 찾기, 비밀 정보가 커밋됐을 때의 순서를 설명합니다.
가장 자주 받는 질문이다. .gitignore는 아직 추적되지 않은 파일에만 적용된다. 이미 한 번 커밋된 파일은 규칙을 추가해도 계속 변경 사항이 보인다. 추적을 멈추려면 인덱스(스테이징 영역)에서 파일을 빼야 한다.
파일 하나 또는 폴더 하나
# 1) .gitignore에 규칙 추가 (예: .env, dist/)
# 2) 인덱스에서만 제거 — 작업 폴더의 실제 파일은 그대로 남는다
git rm --cached .env
git rm -r --cached dist/
# 3) 커밋
git commit -m "Stop tracking .env and dist"
--cached가 핵심이다. 이 옵션이 없으면 git rm은 작업 폴더의 파일까지 지운다. 디렉터리는 -r이 필요하다.
무시 규칙에 걸리는 추적 파일 찾기
템플릿을 새로 적용한 뒤 무엇이 걸리는지 확인하려면 다음 명령을 쓴다.
git ls-files -ci --exclude-standard
-c는 추적 중인 파일, -i는 무시 규칙에 일치하는 것만, --exclude-standard는 .gitignore·.git/info/exclude·전역 설정을 모두 적용하라는 뜻이다. 목록이 맞다면 한 번에 추적에서 뺄 수 있다.
# bash / zsh
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached --
# PowerShell
git -c core.quotePath=false ls-files -ci --exclude-standard | ForEach-Object { git rm --cached -- "$_" }
생성기의 추적 해제 탭에서 이 명령을 셸에 맞게 만들 수 있다.
전체를 다시 적용하는 방법
.gitignore를 크게 바꿨다면 인덱스를 비우고 다시 추가하는 방법도 흔히 쓴다.
git rm -r --cached .
git add .
git commit -m "Apply .gitignore"
git add .는 무시 규칙을 적용해 다시 추가하므로 무시 대상은 빠진다. 다만 커밋 전에 git status로 삭제 목록을 꼭 확인한다. 줄바꿈 설정(core.autocrlf)이 달라진 저장소에서는 많은 파일이 변경으로 보일 수 있다.
다른 사람에게 미치는 영향
추적 해제 커밋을 push하면, 그 커밋을 pull하는 다른 사람의 작업 폴더에서는 해당 파일이 삭제된다. git 입장에서는 파일이 저장소에서 지워진 것이기 때문이다. .env나 IDE 설정처럼 각자 필요한 파일이라면 미리 알려서 백업하게 한다.
비밀 정보가 이미 push됐다면
추적 해제는 앞으로의 커밋에만 영향을 준다. 과거 커밋에는 파일이 그대로 남아 있어 누구나 이력에서 꺼내 볼 수 있다. 순서는 다음과 같다.
- 노출된 키·비밀번호를 먼저 폐기하고 새로 발급한다. 이것이 가장 중요하다.
- 파일을 추적에서 빼고 .gitignore에 추가한다.
- 필요하면 git filter-repo 같은 도구로 이력에서 파일을 지우고 강제 push한다. 이미 clone·fork된 사본까지 지울 수는 없으므로 1번을 대신하지 못한다.
assume-unchanged, skip-worktree는 무시 기능이 아니다
git update-index --assume-unchanged와 --skip-worktree는 추적 중인 파일의 변경을 잠시 보이지 않게 하지만 파일은 계속 추적된다.
--assume-unchanged는 성능용 힌트다. git이 파일 변경을 확인하지 않아도 된다고 약속하는 것으로, git이 필요하면 이 표시를 무시할 수 있다.--skip-worktree는 작업 폴더의 파일을 git이 건드리지 않도록 하는 표시로, 희소 체크아웃(sparse checkout)에 쓰인다.
git 문서도 추적 파일의 변경을 무시하려는 목적으로 이 옵션들을 쓰지 말라고 안내한다. 공유 설정 파일은 config.example.json을 커밋하고 실제 config.json은 무시하는 방식이 안전하다.
참고
- git-rm 공식 문서
- git-ls-files 공식 문서
- git-update-index 공식 문서: NOTES
- GitHub Docs: Ignoring files
- 확인 기준일: 2026-09-23 (git 2.50.1로 명령 검증)