Lsiron
코드 짜다가 실수를 한다면? - git restore, git revert, git reset 본문
깃을 커밋 또는 스테이징 하다가 실수 했을때 다시 되돌리는 방법이 있다.
먼저 파일을 복구하는 방법에 대해 알아보자.
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/
'공부방 > Git' 카테고리의 다른 글
git lab에서 merge request 하는 방법. (0) | 2024.06.17 |
---|---|
타인과 협업하기 - git clone, git pull, pull request, git checkout (0) | 2024.06.09 |
깃 브랜치와 병합 ! - git status, git branch, git merge(git rebase, git squash) (2) | 2024.06.02 |
잊을때마다 보는 Git 사용법(window) - 깃 원격저장소에 등록하기 (0) | 2024.05.31 |