본문 바로가기
utils/git and github

[git] restore : 이전 상태로 되돌리기.

by ds31x 2024. 1. 1.

resetrevert 가 commit이 이루어진 이후 되돌리기에 주로 사용된다면,

 

restore 는 주로

  • staged가 된 파일을 다시 working directory (or working tree)로 되돌리거나,
  • working tree에 이루어진 수정사항을 최근 commit으로 다시 돌리는 등의

commit 이전 (Working tree 와 Stage)에서 되돌리기 에 주로 사용된다.

물론, restore 는 말 그대로 되돌리는 것으로 특정 파일을 특정 commit 시점의 상태로 되돌릴 수도 있다

(이 경우 working directory에 해당 commit의 상태로 되돌림. 때문에 staging과 commit 이 추후 이루어져야 함.)

과거엔 checkout 을 통해 제공되던 기능이었으나,
너무 많은 기능이 checkout에서 집중되어서
branch관련은 switch로, 되돌리기는 restore로 분리됨.


사용법 1 : working directory의 변경사항을 최근 commit 상태 (=HEAD)로 되돌리기.

git restore <modified\_file>
  • 즉, Working directory 에 이루어진 수정사항 (= 아직 commit 이 이루어지지 않은 수정사항)을 최근 commit 된 상태(HEAD 가 가르키고 있음)로 되돌림.
  • 이 방법으로 취소된 수정사항은 복원이 불가능 하니 주의해야함.
    • 현재 변경된 내용을 날려버리면 안되면서도 현재는 우선 되돌려야 한다면,
    • stash 로 임시 저장하거나,
    • 임시로 branch 를 만들어 저장해놓고 restore를 사용해야 함.

사용법 2 : staging이 이루어진 수정 사항을 working tree로 다시 되돌리기 (Unstaging).

git restore --staged <target\_file>

<target_file>를 Unstage시킴 : unstage

  • git restore가 working tree에서의 수정사항( Modified file)을 취소시키는 데 사용된 것처럼,
  • 현재 stage에서의 수정사항 (stage에 올려졌으나 repository에 올려지지 않은 내용)을 취소시킬 경우,
  • git restore --staged 대상파일을 사용.

사용법 3 : 특정 commit 시점의 상태로 특정 파일의 working directory 상태를 변경.

git restore --source=<복원시점_commit_id> <복원대상_file>
  • <복원시점_commit_id>git log로 확인 가능한 해당 commit의 hashkey임.
    • e.q. 629d37b107ab9015cbb0fd5812360b376aa5f44f
    • 앞의 7자리 정도만 사용해도 됨.
  • working tree 에서 해당 파일이 지정한 commit의 상태로 변경됨.
  • 때문에 staging과 commit을 수행해줘야 함.