Skip to content
문제 해결약 5분 소요Git 2.40+ 표준 검증

이미 커밋된 파일을 Git 추적에서 제외하는 방법

.gitignore에 추가했음에도 변경 사항이 계속 감지되는 원인과 로컬 원본 파일을 안전하게 유지하면서 Git 캐시에서 제거하는 완벽 가이드.

1. .gitignore가 '추적되지 않은 파일'에만 동작하는 이유

Git의 설계 원칙상 .gitignore는 아직 Git에 등록되지 않은 '추적되지 않은 파일(Untracked files)'에 대해서만 무시 규칙을 적용합니다. 이미 git add 및 git commit을 통해 저장소에 반영된 파일은 Git 인덱스(스테이징 영역)에서 계속 추적(Tracked)됩니다.

따라서 나중에 .gitignore 파일에 경로를 추가하더라도 Git이 자동으로 추적을 멈추지 않습니다. 로컬 디스크의 실제 파일은 그대로 보존하면서 Git의 인덱스에서만 파일을 제거(추적 해제)해야 합니다.

.gitignore의 기본 원칙

.gitignore는 새로운 파일이 실수로 커밋되는 것을 방지합니다. 이미 추적 중인 파일을 자동으로 제외하지는 못합니다.

2. 해결 방법 1: 특정 파일 하나만 추적 제외하기

git rm 명령어에 --cached 옵션을 사용하면 로컬 컴퓨터의 파일은 보존한 채 Git 인덱스에서만 안전하게 파일을 제거할 수 있습니다:

bash
# 1. .gitignore 파일에 해당 파일이 포함되어 있는지 확인
echo ".env" >> .gitignore

# 2. Git 인덱스에서만 파일 제거 (로컬 파일은 보존)
git rm --cached .env

# 3. 변경 사항 커밋
git commit -m "Stop tracking .env file"

3. 해결 방법 2: 폴더(디렉터리) 전체를 재귀적으로 추적 제외하기

build/ 또는 node_modules/ 폴더 전체가 실수로 커밋된 경우에는 재귀 옵션인 -r 플래그를 --cached와 함께 전달합니다:

bash
# 1. .gitignore에 디렉터리 패턴 추가
echo "build/" >> .gitignore

# 2. 디렉터리를 재귀적으로 Git 인덱스에서 제거
git rm -r --cached build/

# 3. 제외 사항 커밋
git commit -m "Stop tracking build/ output directory"

4. 해결 방법 3: 저장소 전체 캐시 새로고침

.gitignore를 나중에 작성하여 이미 많은 파일이 커밋된 상태라면, 전체 인덱스 캐시를 한 번 비운 뒤 .gitignore 규칙에 따라 다시 추가하는 것이 가장 확실합니다:

bash
# 1. 현재 작업 내용이 커밋되었거나 스태시되었는지 확인
git status

# 2. Git 인덱스의 모든 파일 캐시 제거
git rm -r --cached .

# 3. .gitignore 규칙을 준수하여 다시 추가
git add .

# 4. 캐시 갱신 커밋
git commit -m "Refresh repository tracking to match .gitignore"

5. 안전 확인 및 팀 협업 시 주의사항

주의: 로컬 안전성 vs 팀원의 git pull 시 영향

명령어를 실행한 작업자의 로컬 파일은 안전하게 유지됩니다. 하지만 이 커밋을 원격에 푸시하면, 다른 팀원이 git pull을 실행할 때 원격 저장소에서 삭제된 것으로 인식되어 해당 팀원의 로컬 파일이 삭제될 수 있습니다.

환경 변수나 설정 파일을 추적 제외할 때는 미리 팀원들에게 공지하고, 대체용 템플릿인 .env.example 파일을 프로젝트에 제공하세요.

자주 묻는 질문 (FAQ)

.gitignore 규칙, 캐싱, 저장소 설정에 대해 개발자들이 가장 자주 묻는 질문과 실전 해결책입니다.

.gitignore에 추가했는데도 파일 변경 사항이 계속 감지되는 이유는 무엇인가요?

.gitignore는 아직 추적되지 않은 파일에만 적용됩니다. 이전에 커밋된 파일은 'git rm --cached <파일명>' 명령어로 인덱스에서 제거하기 전까지 계속 감시됩니다.

git rm --cached를 실행하면 내 컴퓨터의 로컬 파일도 삭제되나요?

아닙니다. --cached 플래그는 오직 Git의 스테이징 인덱스 목록에서만 파일을 제거하며, 디스크의 실제 원본 파일은 그대로 유지됩니다.

추적 제외 커밋을 푸시하면 다른 팀원들에게 어떤 영향을 주나요?

저장소에서 파일이 삭제된 것으로 처리되므로, 다른 팀원이 git pull을 실행하면 로컬 파일이 지워질 수 있습니다. 팀원들이 환경을 복구할 수 있도록 .env.example 템플릿을 함께 제공해야 합니다.

← 가이드 읽기전체 생성기에서 열기