Engineering Note

[git] Git 파일 추적 중단 및 삭제된 파일 복구 가이드 본문

Git

[git] Git 파일 추적 중단 및 삭제된 파일 복구 가이드

Software Engineer Kim 2025. 9. 28. 16:22

이미 추적 중인 파일을 더이상 git이 추적하지 않게 하려고 git rm --cached 명령을 사용했는데 파일이 삭제 된 경험이 있어서 복구 과정을 정리하고, 이미 추적 중인 파일을 삭제하지 않으면서 .gitignore에 추가하는 방법과 삭제된 파일을 복구하는 방법을 공유하려고 한다.
 


파일 추적 중단 시 안전한 순서

올바른 방법 (파일 유지)

# 1. gitignore에 먼저 추가
echo "src/main/resources/application-local.yml" >> .gitignore
git add .gitignore
git commit -m "Add application-local.yml to gitignore"

# 2. 추적 중단
git rm --cached src/main/resources/application-local.yml
git commit -m "Stop tracking application-local.yml"

 
 
잘못된 방법 (파일 삭제됨)

# gitignore 없이 바로 추적 중단
git rm --cached src/main/resources/application-local.yml
git commit -m "chore:local.yml gitignore 추가"
# → 다른 환경에서 pull 시 파일 삭제됨

 
내가 사용했던 방법이다. 이미 추적 중인 파일을 .gitignore에 등록하지 않고 git rm --cached를 하다보니 git은 추적을 안할 뿐 아니라 파일을 삭제하라는 의미로 알아들어서 local에서도 파일을 삭제해버렸다.
 
다행히도 git은 매우 똑똑해서 한 번 추적한 파일은 기록을 가지고 있기 때문에 쉽게 복구할 수 있었다.
 

실수로 삭제된 파일 복구 방법

1. 삭제된 커밋 찾기

아래 명령어로 파일 변경 히스토리를 찾거나, 삭제 커밋을 확인할 수 있다.

# 파일 변경 히스토리 확인
git log --oneline --follow -- src/main/resources/application-local.yml

# 삭제 커밋 확인
git log --diff-filter=D --summary | grep application-local.yml
 

 
삭제 커밋을 확인하였더니, 아래 처럼 커밋내역을 확인할 수 있었다.

delete mode 100644 src/main/resources/application-local.yml

 
 
삭제된 커밋내역을 아래 명령어와 함께 작성하면 삭제된 파일을 복구 할 수 있다.

# 삭제 커밋 이전 상태에서 복구
git checkout 100644 -- src/main/resources/application-local.yml

# 복구 확인
ls -la src/main/resources/application-local.yml

 
 
복구후에 .gitignore에 등록하여 git 추적을 계속 막기 위해서는 파일의 상태를 확인해야 한다. 만약 파일의 상태가 staged 상태라면 unstaged로 바꾸어야 git이 추적하지 않는다.
 

# 파일이 다시 추적되지 않도록 unstage
git restore --staged src/main/resources/application-local.yml

# gitignore 확인
cat .gitignore | grep application-local.yml

 
 

핵심 개념

git rm --cached의 동작:

  • gitignore가 없으면: "파일 삭제" 명령으로 해석
  • gitignore가 있으면: "추적 중단" 명령으로 해석

순서의 중요성: gitignore 등록 → 추적 중단 순서가 파일 보존의 핵심입니다.
 
그리고 이러한 사고를 미연에 방지하기 위해서는 커밋하기 전에 항상 git status를 통해 파일들의 상태를 확인하고 커밋하는게 중요합니다.

'Git' 카테고리의 다른 글

git template message 설정하기  (0) 2021.10.30
Github에 있는 파일 또는 폴더 삭제하기  (0) 2021.10.30
git pull 에러  (0) 2021.10.22
git log --oneline  (0) 2021.10.19
git local과 remote 브랜치 default 연결 설정하기  (0) 2021.09.30
Comments