본문 바로가기
삵

git restore로 되돌리기와 언스테이징 구분하기

조회 0 · 댓글 0
¯¯\_(ツ)_/¯작성자2026년 11월 3일

스테이징한 파일을 내리거나 작업 트리의 수정을 버릴 때 git checkout 하나로 다 처리하던 걸 git 2.23부터는 git restore로 나눠 쓸 수 있습니다. 같은 명령에 옵션만 바꾸면 되돌리는 위치가 달라지므로 이 차이를 알아두면 실수를 줄입니다.

옵션 없이 쓰면 작업 트리를 인덱스 내용으로 되돌립니다. 즉 스테이징하지 않은 수정이 사라집니다. 스테이징을 취소하고 싶을 때는 --staged를 붙입니다. 이때는 인덱스만 건드리고, 소스는 기본값이 HEAD라 작업 트리의 수정은 그대로 남습니다. 작업 트리와 인덱스를 함께 되돌리려면 --staged --worktree를 같이 지정하고, 특정 커밋 내용으로 되돌리려면 --source로 트리를 지정합니다.

# 작업 트리의 수정 버리기 (인덱스 내용으로 복구)
git restore hello.c

# 스테이징만 취소 (인덱스를 HEAD로, 작업 트리는 유지)
git restore --staged hello.c

# 인덱스와 작업 트리를 특정 커밋 내용으로 함께 되돌리기
git restore --source=HEAD --staged --worktree hello.c

옵션 없는 git restore나 --worktree는 커밋하지 않은 수정을 덮어쓰는 파괴적 동작입니다. 되돌릴 수 없으니 버릴 변경인지 확인하고 실행합니다. 문서에 따르면 --source를 생략하면 --staged가 있을 때는 HEAD, 없을 때는 인덱스가 소스가 됩니다.

🔗 https://git-scm.com/docs/git-restore

로그인 후 답글을 남길 수 있습니다.