Git에서 파일 지우기 완전 가이드
IT/System
2025. 9. 21. 11:16

개발하다 보면 “로컬에는 두고 싶지만 Git에서는 빼고 싶다”, “이미 커밋된 민감한 파일을 지우고 싶다” 같은 상황이 생깁니다. 이럴 때 쓰는 명령이 바로 git rm 입니다. 이 글에서는 실무에서 자주 쓰는 패턴만 추려 빠르게 정리합니다.
git rm 한 줄 정의
작업 디렉터리(로컬 파일)와 Git 인덱스(스테이징/히스토리)에서 파일을 제거하는 명령.
- 기본 동작: 로컬 파일도 삭제 + 다음 커밋에 삭제 반영
- 로컬은 남기고 Git에서만 제거하려면 --cached 사용
Git에서만 제거 (로컬은 유지) — 민감정보에 최적
# .env를 Git 추적에서만 제거(파일은 로컬에 남김)
git rm --cached .env
git commit -m "Remove .env from repository"
# 반드시 .gitignore에 .env를 추가하세요. 그래야 이후부터 다시 추적되지 않습니다.
echo ".env" >> .gitignore
git add .gitignore
git commit -m "Add .env to .gitignore"
# 로컬 파일도 함께 삭제
git rm .env
git commit -m "Delete .env completely"
#디렉터리/패턴 한 번에 제거
# 디렉터리 통째로
git rm -r path/to/dir
# 특정 확장자 전부
git rm --cached "*.log"
# 폴더 안 특정 패턴
git rm --cached -r logs/ # 폴더 통째로 추적 해제
#강제 삭제 (강제 스테이지 제거)
git rm -f file-that-changed-locally.txt
git rm vs OS의 rm/del 차이
- OS의 rm으로 파일을 지우면 Git은 변화만 감지합니다. 이후에 git add -A 또는 git commit -a를 해야 커밋에 반영됩니다.
- git rm은 삭제 + 스테이징까지 한 번에 처리하므로 실수할 여지가 적습니다.
한 번에 자주 쓰는 시나리오(복붙용)
A) .env가 이미 커밋됨 → 앞으로 추적 금지 + Git에서만 제거
echo ".env" >> .gitignore
git add .gitignore
git commit -m "Add .env to .gitignore"
git rm --cached .env
git commit -m "Remove .env from repository"
git push
B) 빌드 산출물 무시하기
# 예: dist/는 커밋하지 않음
echo "dist/" >> .gitignore
git add .gitignore && git commit -m "Ignore dist folder"
# 기존에 올라간 dist 제거(로컬은 유지)
git rm --cached -r dist/
git commit -m "Stop tracking dist folder"
git push
과거 커밋에서 완전히 지우고 싶을 때(히스토리 재작성)
git rm만으로는 과거 커밋에 남은 기록은 지워지지 않습니다. 민감정보가 노출됐다면 아래처럼 히스토리 재작성이 필요합니다.
권장: git filter-repo
# 설치(예: Debian/Ubuntu)
sudo apt-get install git-filter-repo
# .env 기록 전체 제거
git filter-repo --path .env --invert-paths
# 강제 푸시
git push origin --force --all
git push origin --force --tags
728x90
'IT > System' 카테고리의 다른 글
| VSCode 설정 파일 완전 정리 – 개발자 생산성 200% 올리는 설정 팁 (1) | 2025.05.17 |
|---|---|
| Bitbucket 원격 태그 삭제하는 방법 (0) | 2025.02.27 |
| nmap을 이용한 네트워크 스캔 방법 (0) | 2025.02.02 |
| GIT Remote 레포지토리 변경 하기 (0) | 2023.03.21 |
| [툴 소개]Mac에서 실행중인 프로세스 전부 확인하기 (0) | 2023.02.21 |