처음부터 차근차근
reset 취소와 commit checkout 본문
reset이란
reset을 한다는 것은 branch의 최신 commit을 바꾸는 것이다.
아래에 예시를 보자.
현재 git log이다.
두번 째 commit의 주소를 복사하여 두번 째 commit으로 hard reset을 해보았다.
이 상태에서 gistory를 보면
HEAD는 master branch를 가리키고 master branch는 최신 commit으로 두 번째 commit을 가지는 것을 알 수있다.
즉, reset을 한다는 것은 branch의 최신 commit을 바꾸는 행동이다.
reset을 하면 reset된 commit은 사라질까?
답은 '아니다'이다.
위의 예시를 이어서 보자.
위 예시의 세번 째 commit은 사라지지 않았다.
reset된 commit을 가지고 있는 파일은 총 두 개가 있다.
- ORIG_HEAD 파일 : git이 정보를 잃어버리는 등의 위험한 명령을 하기 전에 정보를 미리 저장해 놓는 곳
- logs / refs / heads / master : master branch에서 일어나는 일들을 기록해 놓는 파일
.git / ORIG_HEAD 파일을 보면 reset되어 사라진 세번 째 commit이 있다.
그리고 logs / refs / heads / master 파일을 보면 맨 아래에 reset으로 인해 세번 째 commit이 두 번째 commit으로 변경되었다는 것을 알 수 있다.
즉, reset을 하더라도 reset된 commit은 없어지지 않는다.
reset을 취소하는 방법
ORIG_HEAD 파일을 이용하면 방금했던 reset을 취소할 수 있다.
reset을 취소하는 방법은 ORIG_HEAD를 reset하면 된다.
git reset --hard ORIG_HEAD
commit id로 checkout
checkout은 branch 뿐만 아니라 commit으로도 할 수 있다.
두번 째 commit의 주소를 복사해서 checkout을 한다.
그러면 이런 글이 뜬다.
head가 branch가 아닌 특정한 commit을 가리키는 상황을 detached라고 한다.
이 상태에서 git branch를 해보면 아래와 같이 head가 commit id를 가리키는 것을 볼 수 있다.
gistory를 보면 HEAD 파일이 두번 째 commit을 가리키는 것을 알 수 있다.
출처 : '지옥에서 온 Git - 생활 코딩' 변형 및 요약
'Git' 카테고리의 다른 글
merge(branch) 충돌 원리와 3 way merge (0) | 2021.11.04 |
---|---|
reset의 종류 (0) | 2021.10.29 |
Branch 충돌 (0) | 2021.10.19 |
branch의 원리와 git log의 원리 (0) | 2021.10.01 |
commit의 원리 (0) | 2021.09.30 |