Lsiron

코드 짜다가 실수를 한다면? - git restore, git revert, git reset 본문

공부방/Git

코드 짜다가 실수를 한다면? - git restore, git revert, git reset

Lsiron 2024. 6. 9. 12:12

깃을 커밋 또는 스테이징 하다가 실수 했을때 다시 되돌리는 방법이 있다.

 

먼저 파일을 복구하는 방법에 대해 알아보자.

 

1. git restore

$ git restore 파일명

 

=> 특정 파일을 최근 commit 상태로 복구 할 수 있다. (ctrl + z 가 안 먹히는 경우, 즉 컴퓨터가 다운됐을때 주로 사용한다.)

 

=> 가장 최근에 commit 을 해 준, '3' 파일이다.

 

=> 위와 같이 '3' 파일을 수정해보자.

 

=> "git restore 3" 명령어를 입력한 결과 바로 최근에 commit을 해 준 상태로 파일이 복구 됐음을 확인 할 수 있다.  

 

$ git restore --source 커밋아이디 파일명

 

=> 특정 파일을 특정 commit 시점으로 파일을 복구하는 명령어이다.

 

=> '3' 파일을 수정하여, 3과4 commit 메세지를 넣고 commit 해 주었다.

 

=> '3'파일에 3과 4를 입력하고, '9f2ce36' 커밋을 줬던 '3'파일을 "git restore --source 20bcf7c 3" 을 통해 '20bcf7c' 커밋으로 파일을 복구 해 주었더니, 해당 commit을 주었던 상태로 복구되었다.

 

$ git restore --staged 파일명

 

=> 특정 파일 staging 을 취소 할 수 있다.

 

 

=> '3' 파일을 수정한 후, "git add ." 명령어를 통해 해당 파일을 staging 하였다.

 

 

=> "git restore --staged 3" 명령어를 통해 staging 상태에 올려두었던 '3'파일을 언스테이징 하였다.

 

$ git restore .
$ git clean -fd

 

=> 한 번에 모든 변경사항을 되돌리고, 추가된 파일 및 디렉터리를 삭제하는 방법이다. 다음 명령어를 순서대로 실행한다.

모든 변경사항을 삭제하고 가장 최근 커밋상태로 파일을 되돌린다.

 

=> 변경했던 모든 파일을 삭제 및 되돌리고 가장 최근 커밋으로 돌아갔다.

 

2. git revert

$ git revert 커밋아이디

 

=> 특정 파일의 특정 commit을 취소 할 수 있다. 특정 commit을 삭제하는 명령어는 없다. git은 과거를 삭제하거나 조작하거나 지우는게 불가능하다. 때문에 특정 commit에서 수정한 내역을 취소하는 commit을 만드는것은 가능하다.

'5372166' commit을 취소해보자.

 

 

=> "git revert 5372166" 명령어를 통해 "5372166" commit을 취소 해 보자. 그러면 vscode에 위와같이 COMMIT_EDITMSG 창이 뜬다.

 

 

=> 그러면 취소할 commit 을 등록하는 commit 메세지를 "Revert" 다음에 있는 " "  안에 입력해준다.

 

 

=> 그러면 '5372166' commit을 삭제한 commit '8f8964c' 가 생성된다.

 

 

=> 이 후, 파일은 '5372166' commit을 취소한 상태가 되기 때문에, '2'파일을 생성하고 입력했던 commit '5372166' 상태는 사라지고 '1' 과 '3' 파일만 남은 상태를 확인 할 수 있다.

 

$ git revert 커밋아이디 커밋아이디 커밋아이디..

 

=> 위 명령어를 통해 commit을 여러개 취소 또한 가능하다.

 

$ git revert HEAD

 

=> 또한 위 명령어를 통해 가장 최근 commit 취소가 가능하다.

 

 

3. git reset

$ git reset --hard 커밋아이디

 

=> 특정 commit 시점으로 모든것을 되돌리는 것이 가능한 명령어 이다. '5372166' commit 아이디로 돌아가보자

 

 

=> commit을 '5372166' 상태로 돌아가보자.

 

 

=> '5372166' commit 이후의 commit은 모두 삭제가 된 것을 확인 할 수 있다.

$ git reset --soft 커밋아이디

 

=> 리셋이지만, 변동사항을 지우지 말고 스테이징 해놓는 명령어이다. 

 

$ git reset --mixed 커밋아이디

 

=> 리셋이지만, 변동사항을 지우지 말고 언스테이징 해놓는 명령어이다.

 

허나, git reset 명령어는 협업시엔 위험하기 때문에 사용금지이다. 혼자 프로젝트 할 때도 가능한 쓰면 안된다.

 

참조: 코딩애플 https://codingapple.com/course-status/