티스토리 뷰

Git

#6 git revert, reset, restore

RadderNepa 2022. 11. 10. 00:22

● 도입

- git은 버전관리 프로그램이기에 언제든지 이전 commit 으로 되돌아가거나 문제가 되는 commit 내역을 취소할 수 있다.
- 이번 글에서는 git restore / git revert / git reset 명령어를 통해 파일 복구 방법을 알아볼 것이다.

git restore : 파일 하나 복구
git revert : commit 복구
git reset : 시간 되돌리기

- 깔끔한 상태에서 시작하기 위해 새로운 작업 폴더를 하나 만들었다.
- 해당 폴더에서 git init 후 commit을 몇 번 했다.(파일 3개 생성, 만들 때 마다 commit)

git init
git log --oneline --all

- 위 사진 왼쪽에 있는 노란 문자들은 commit의 고유 id 이다.
- 해당 고유 id를 이용해 "내가 원하는 고유 id로 되돌려라" 같은 명령이 가능하다.


● git restore : 파일 하나 되돌리기

- 파일 하나가 잘못되었을 경우 (ctrl + z) 여러번 누르면 되지만 수정사항이 너무 많다면 명령어 하나로 처리할 수 있다.

git restore 파일명
--> 최근 commit 된 상태로 현재 파일의 수정 내역을 되돌릴 수 있다.

git restore --source 커밋아이디 파일명
--> 입력한 파일이 특정 commit id 시점으로 복구

cf) 복구랑 상관없는 명령어
git restore --staged 파일명
--> 특정 파일의 staging 취소

thr.txt 파일의 내용을 수정했다.(add & commit은 하지 않았다.)
git restore thr.txt 입력 후 / 입력된 내용이 사라지고 최근 커밋된 내용으로 복구됐다.


 git revert : commit 되돌리기

- 코딩(복붙) 열심히 하던 중 갑자기 과거 commit 하나가 문제를 일으키는 경우가 있다.

출처 - 코딩애플 매우쉽게 알려주는 git & github

- 위 사진을 보면 현재 commit이 3개 있는데 이 중 b 파일이 문제가 많아 b 파일을 만든 d874b2b commit을 취소하고 싶은 것이다.
- 이때 commit 하나를 취소하고 싶으면 git revert 명령어를 사용하면 된다.
- 정확히 말하면 취소(삭제)는 아니고 commit 하나를 취소한 commit을 하나 생성하는 것이다.

git revert 커밋아이디
--> 해당 커밋아이디에서 일어난 일만 취소
--> 실행 시 Vim 에디터가 뜨면 커밋 메세지 수정하고 닫으면 된다.

git revert 5cb35bb 입력 후 모습

- 나는 two.txt 파일이 commit 된 5cb35bb commit을 revert 할 것이다.

- 참고로 위 사진은 Vim 에디터가 아니다. 위 사진에서는 쌍따옴표에 커밋 메세지 입력 후 저장하면 알아서 commit 된다.

- git log를 보면 revert 했다는 새로운 commit이 자동으로 생성되어있다.(be5dce2 commit 참고) 

- 작업 폴더에서 one.txt, thr.txt 파일은 있지만 two.txt 파일은 삭제됐다.

- 해당 commit id 이후에 했던 파일이나 commit 들은 아무런 영향없이 유지된다.

- 결론: revert 명령어를 쓰면 특정 commit에서 있었던 일을 지워버릴 수 있다.

출처 - 코딩애플 매우쉽게 알려주는 git & github

참고
- revert 할 때 동시에 여러개의 commit id 도 입력 가능하다.
- 가장 최근에 했던 commit 1개만 revert 하고 싶으면 git revert HEAD 명령어를 사용하는게 더 편리
- merge 명령으로 인해 새로 만들어진 commit도 revert 가능하다. 그러면 merge가 취소된다.

 

cf)

출처 - 코딩애플 매우쉽게 알려주는 git & github

- revert 명령시 가끔 Vim 에디터가 뜨는 경우가 있다.
- Vim 에디터에서 커밋 메세지를 수정하라는 얘기인데 i 를 눌러 메세지 입력 후 esc 를 눌러서 나올 수 있다.
- 나온 후 :wq 누르면 커밋 메세지가 저장된다.


 git reset : 시간 되돌리기

- git reset 명령어 사용하면 특정 commit 시점으로 아예 모든걸 되돌릴 수 있다. 

git reset --hard 커밋아이디
--> 해당 commit이 생성된 시점으로 시간을 되돌려준다.
--> 작업 폴더 내의 파일도 해당 시점으로 돌아간다.

출처 - 코딩애플 매우쉽게 알려주는 git & github

- commit2로 reset --hard 해버리면 commit2 이후의 모든 내용을 잃어버리는 것이다.

- 위험도가 높은 작업인 만큼 git reset은 프로젝트가 망하면 쓰거나 짧은 거리를 되돌아갈 때 쓰도록 하자.

참고
- 여러명이 협업하는 리포지토리에는 보통 reset 쓰면 안된다. 갑자기 소스코드가 사라지는거니까
- untracked 파일들(git add 안해놓은 파일들)은 사라지지않고 유지된다
- git clean 명령어 찾아서 쓰면 untracked 파일들도 다 지울 수 있다.

reset 하니까 앞에서 지웠던 two.txt 파일이 되살아났다.

 

git reset 명령어 옵션

- 위 사진처럼 a, b, c 파일을 각각 만든 후 생성 때마다 commit을 했다고 해보자

- 이때 git reset 명령어에 hard / soft / mixed 옵션을 적용할 수 있다.

git reset --hard d874b2b
--> a, b 파일은 남아있고 c 파일이 삭제된다.

git reset --soft d874b2b
--> a, b 파일은 남아있고 c 파일은 staging area에 남아있다. 
--> git commit 할 수 있다.

git reset --mixed d874b2b
--> a, b 파일은 남아있고 c 파일은 staging 되지 않은 상태
--> git add 하고 git commit 할 수 있다.

- git reset 하면서 파일을 아예 지워버리는게 아니라 검토하고 다시 commit 하고 싶으면 --soft / --mixed 옵션을 사용해보자

- 사실 'git reset 어쩌구만' 하면 --mixed 옵션이 자동으로 적용된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함