restore는 파일을 정밀하게 되돌려
오랫동안 Git에서 파일을 되돌리는 명령은 git checkout -- file이었어. branch를 바꾸는 checkout과 역할이 겹쳐 입문자를 계속 헷갈리게 했지. Git 2.23이 도입한 git restore는 branch를 바꾸는 checkout과 파일 복원을 분리해 세 영역 사이에서 파일 내용을 옮기는 일만 맡아. 뜻이 훨씬 선명해.
세 가지가 거의 모든 경우를 다뤄. stage하지 않은 편집 버리기: git restore file.js는 작업 트리의 version을 index의 version으로 덮어써 로컬 편집을 없애. Unstage: git restore --staged file.js는 index entry를 HEAD version으로 되돌려 다음 commit에서는 빼되 작업 트리의 편집은 남겨. 둘 다 되돌리기: git restore --staged --worktree file.js는 index와 작업 트리를 HEAD에 맞춰 이 파일의 최근 작업을 모두 없애.
--source를 쓰면 다른 commit에서 복원할 수도 있어. git restore --source=HEAD~3 -- file.js는 세 commit 전의 file.js를 작업 트리로 가져와. 필요하면 index까지 함께 바꿀 수 있어. 프로젝트 전체를 움직이지 않고 파일 하나만 지난주 모습으로 되돌리는 방법이야.
Restore는 조용하고 좁은 undo야. branch pointer도 옮기지 않고 이력도 다시 쓰지 않으며 다른 파일을 건드리지 않아. 폭발 반경은 명시한 path 그대로지. 파일 하나의 실수에는 branch 전체와 commit하지 않은 변경을 함께 덮는 git reset --hard보다 훨씬 알맞아.