reset, checkout 원리

JeongChaeJin·2021년 2월 5일
0

Git

목록 보기
14/14

mkdir reop
git init
vi file1.txt
git add file1.txt
git commit -m 1
vi file1.txt
git add file1.txt
git commit -m 2

먼저 깃 저장소에 add commit 하자.
버전을 2개를 만들었고, git 의 최대 장점인 버전 되돌아가기로 원리를 파악해보자.

1. git reset 을 하면 어떻게 될까?

git reset 798f4b9c735b98ee272f196c2061136d6af27093 --hard

  • 현재 버전에서 이전 버전으로 이동한다.

    git log

  • HEAD 는 이전 버전의 commit 의 master 를 가리킨다.

  • ./HEAD 안의 해쉬 Key 를 따라가보니 ./HEAD 는 refs/heads/master (master는 현재 branch 임을 기억)를 가리키고 그 안에는 master의 현재 commit 1 을 가리키고 있는 것을 확인할 수 있다.

  • 한가지 알아야 할 점은 reset --hard 를 사용하면 최신 버전이 사라진 것처럼 느끼게 된다. 하지만 git 은 이러한 위험한 행위를 용납하지 않는다. 어딘가에 저장되어있다.. 이런행위를 하게되면 .. 어딜까 ?

  • 답은 ORIG_HEAD 다.

  • git 은 역시 철저한 것 같다. 나중에 reset --hard 를 실수로 써버리는 바람에 최신 버전이 날아가버린다면 ORIG_HEAD 폴더를 들여다 보면 될 일이다.

되돌려보자

git reflog

  • 여기서 모든 로그들이 나오는데, 현재 commit 해쉬 key 가 아니라 이전에 사용하던 버전의 해쉬 key 를 가지고 살려볼 수 있겠다.

git rest 복구하려는_hash_key

  • 이러면 hard 로 사라졌던 버전이 복구가 된다. git status 했을 때 modified 가 되어있으면 파일 내용은 git resotre 로 이 때 버전으로 복구해주면된다.

  • git Nice.. Baby..

2. git checkout 원리

git checkout -b test

  • test branch 를 하나 만들어봤다.

  • HEAD 파일만 바꼈다. 여기서 기억해야 되는 점은 HEAD 는 branch 를 가리키는 파일이라는 것이다.
  • 한가지 신기했던 점은 git checkout commit_hash_key 를 하면 HEAD가 master detached.. 어쩌고 뜨면서 파일이 이 commit 버전을 바로 가리킨다. 잘 사용하진 않을 것 같지만 checkout 으로 버전을 가리키는 것도 가능하다는 것만 알면 될 것 같다.
profile
OnePunchLotto

0개의 댓글