git reset
git reset [옵션] [커밋ID]
예시) 커밋 2까지 있는 상태에서 1로 돌려본다.
각 옵션마다 영향받는 범위
working directory
: 실제 작업 공간index
: add한 파일 모아두는 공간repository
: commit들 저장되는 공간옵션 | working directory | index | repository |
---|---|---|---|
--hard | o | o | o |
--mixed | x | o | o |
--soft | x | x | o |
삭제한 커밋을 되돌리고 싶다면 삭제한 커밋ID를 알아내 다시 reset하면 된다. 삭제한 커밋ID는 두 파일에 저장된다.
1. ORIG_HEAD
2. logs/refs
1. ORIG_HEAD
.git/ORIG_HEAD
: reset 명령어 실행 전 git이 현재 브랜치의 HEAD가 가르키던 커밋을 저장해놓는다. 이를통해 reset을 취소할 수 있다.
git reset --hrad ORIG_HEAD
2. logs/refs
.git/logs/refs/heads/main
: 커밋이 어떻게 수정되었는지 log 기록이 저장되어 있다. 아래 명령어 통해 볼 수 있다.
git reflog
예시) git reflog
가장 왼쪽 노란색 커밋ID를 사용하거나 HEAD{숫자}를 활용해도 된다.
HEAD{0}의 경우 가장 최근 활동이다.
git reset --hrad [커밋ID 또는 HEAD{숫자}]
예시) 커밋 2가 다시 돌아온 모습이다
checkout으로 특정 커밋 시점으로 갈 수 있다.
git checkout 커밋ID
You are in 'detached HEAD' state
라는 메세지가 뜨며 커밋ID가 이름인 브랜치가 생긴 것 처럼 보인다. 하지만 이는 실제 브랜치가 아니고 .git/HEAD
가 가르키는 위치가 우리가 적은 커밋ID라는 뜻이다.
현재 우리는 커밋ID 상태에 와있는 것이다. 다시 main 브랜치로 돌아가면 커밋 브랜치는 사라진 상태이다.
출처
https://www.youtube.com/playlist?list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk