처음부터 차근차근

reset 취소와 commit checkout 본문

Git

reset 취소와 commit checkout

_soyoung 2021. 10. 28. 14:24
반응형
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을 가지고 있는 파일은 총 두 개가 있다.

  1. ORIG_HEAD 파일 : git이 정보를 잃어버리는 등의 위험한 명령을 하기 전에 정보를 미리 저장해 놓는 곳
  2. 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

reset된 세 번째 commit이 돌아온 것을 볼 수 있다.

 

 

 

 

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
Comments