일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이스케이프 문자
- buffer
- R
- s
- C programming
- 메모리구조
- 윤성우 열혈자료구조
- 혼자 공부하는 C언어
- stream
- datastructure
- Selection Sorting
- JSON
- Graph
- C 언어 코딩 도장
- Serialization
- Algorithm
- Stack
- coding test
- list 컬렉션
- 이것이 자바다
- 알기쉬운 알고리즘
- insertion sort
- 윤성우의 열혈 자료구조
- Today
- Total
Engineering Note
[git] Git 파일 추적 중단 및 삭제된 파일 복구 가이드 본문
이미 추적 중인 파일을 더이상 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 |