git add만 취소하고 편집한 파일을 남기려면 작업 트리가 아니라 인덱스를 대상으로 해야 합니다. 커밋이 있는 저장소에서 git restore --staged로 특정 파일의 스테이징을 취소한 뒤, 파일 내용과 두 diff를 확인하세요.
적용 환경: git restore를 지원하는 Git 2.23 이상, 커밋이 존재하는 로컬 저장소의 추적 파일. 자료 확인일: 2026-10-26. 문서 기반 안내이며 실제 운영 시험 결과가 아닙니다.
1. 원인: 같은 restore라도 바꾸는 대상이 다름
| 형태 | 기본 대상과 주의 |
| restore --staged | 인덱스 복원; 기본 원본 HEAD |
| restore | 작업 트리 복원; 미보존 편집 유실 위험 |
| --staged --worktree | 양쪽 변경; 단순 add 취소와 다름 |
파일을 일부만 스테이징한 경우도 있으므로 변경이 있다는 표시 하나만 보고 진행하지 마세요. 파일 전체의 커밋 준비를 취소할지 특정 부분만 바꿀지 먼저 결정해야 합니다.
2. 해결: 한 파일을 확인하고 취소
대상 저장소 안에서 실행합니다. 아래 path/to/file은 실제 추적 파일 경로로 바꾸세요. 첫 묶음은 조회이며, 민감한 코드나 설정을 외부에 공유하지 않습니다.
git status --short
git diff -- path/to/file
git diff --cached -- path/to/file
현재 편집을 별도로 보존한 뒤, 해당 파일 전체의 스테이징 취소가 목적일 때만 다음 명령을 사용합니다. --worktree는 추가하지 않습니다.
git restore --staged -- path/to/file
3. 확인: 작업 내용이 남았는지 비교
같은 status와 diff 명령으로 결과를 확인합니다. 커밋 준비 영역의 차이가 없어졌는지, 작업 파일에는 의도한 변경이 남아 있는지 각각 봅니다. 편집기에서 실제 파일 내용도 대조하세요.
부분 스테이징을 사용했다면 이전에 나누어 놓은 구분이 없어질 수 있습니다. 필요한 부분을 다시 선택해 add하는 것은 다음 단계이며, 이 명령이 커밋이나 원격 push를 수행하는 것은 아닙니다.
4. 주의와 FAQ
처음 커밋 전에도 그대로 쓰나요? 이 절차는 HEAD 커밋이 있는 저장소를 전제로 합니다. 최초 커밋 전 상태라면 같은 명령을 반복하지 말고 현재 상태에 맞는 별도 절차를 확인하세요.
파일 수정 자체를 버리고 싶다면요? 다른 목적입니다. restore를 옵션 없이 실행하면 작업 내용이 사라질 수 있으므로 복사본이나 필요한 변경 보존부터 확인해야 합니다. 이 글에는 삭제·강제 reset·강제 push를 포함하지 않습니다.
공식 출처와 관련 글
Git-Basics-Undoing-Things.html
git diff가 비어 있는데 변경이 남을 때: 작업 트리·인덱스·HEAD 비교
git add 뒤 일반 git diff가 비어 있다면 변경이 사라졌다고 판단하지 말고 git diff --cached를 확인하세요. 기본 diff는 작업 트리와 인덱스를, --cached는 인덱스와 HEAD를 비교합니다. 먼저 상태와 비교 범
papa-titipo.com

'소프트웨어개발' 카테고리의 다른 글
| 원격 로그는 남는데 docker logs는 짧을 때: dual logging 캐시 확인 (0) | 2026.10.27 |
|---|---|
| CloudWatch Logs 보존 기간을 줄이기 전: 삭제 시점과 복구 한계 확인 (0) | 2026.10.27 |
| S3 파일은 없는데 용량이 남을 때: 미완료 멀티파트 업로드 점검 (0) | 2026.10.27 |