본문 바로가기

직접 만든 소프트웨어, 두 가지 개발 기록

구현 구조와 적용 범위, 확인한 기능과 남은 한계를 함께 기록합니다.

소프트웨어개발

git add를 취소하고 파일은 남기려면: restore --staged 확인 순서

by 아빠띠띠뽀 2026. 10. 27.

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-restore

Git-Basics-Undoing-Things.html

작업 트리·인덱스·HEAD 비교

 

git diff가 비어 있는데 변경이 남을 때: 작업 트리·인덱스·HEAD 비교

git add 뒤 일반 git diff가 비어 있다면 변경이 사라졌다고 판단하지 말고 git diff --cached를 확인하세요. 기본 diff는 작업 트리와 인덱스를, --cached는 인덱스와 HEAD를 비교합니다. 먼저 상태와 비교 범

papa-titipo.com

작업 파일과 커밋 준비 영역을 나누어 비교하는 개념 그림
직접 생성한 개념 이미지입니다. 실제 서비스 화면이나 구축·성능 시험 결과가 아닙니다.