[Git] git reset과 git checkout 차이

jiseong·2021년 10월 30일
0

T I Learned

목록 보기
117/291
post-custom-banner

git reset의 동작방식

위의 사진처럼 현재 Working Directory는 master 브랜치라고 가정한다면,

  • $ git reset HEAD~1
    해당 명령은 master 브랜치가 9e5e6a4를 가리키게 한다.

만약, reset 명령어 시 --soft 옵션을 주었다면 HEAD와 Index 그리고 Working Directory는 아래와 같은 모습일 것이다.

하지만 $ git reset HEAD~1 명령어는 따로 옵션을 주지 않아 --mixed 옵션을 넣은 것 처럼 동작하게 된다.

여기서 $ git reset HEAD~1의 결과로 HEAD와 Index 그리고 Working Directory를 살펴보면
Index는 현재 HEAD가 가리키는 스냅샷으로 업데이트가 되었기 때문에 이후에 git commit을 하게되면 커밋을 수정하기 위해 사용했던 $ git commit --amend의 결과와 같아지게 된다. ( 즉, git add 명령의 상황까지 되돌린다. )

만약, reset 명령어 시 --hard 옵션을 주었다면 Working Directory까지 변경된다.

참고 ❓

Index는 Staging Area와 동일한 개념으로 $ git add 명령어로 Working Directory에 있던 파일을 Staging Area으로 옮긴 상황이다.

git reset과 git checkout 차이

git reset

$ git reset HEAD~3
✔️ 해당 명령은 현재 HEAD가 가리키는 브랜치를 바꾸지 않고 현재 브랜치가 가리키는 커밋을 바꾼다.


다만, 옵션을 어떻게 주었냐에 따라 Index와 Working Directory 값이 달라진다. (해당 경우에는 Index까지)

git checkout

$ git checkout master~3
✔️ 해당 명령은 HEAD 자체를 다른 브랜치로 옮긴다.

이 때, git reset --hard HEAD~3와 같이 Working Directory까지 변경이 된다.

결론

  • reset 명령어는 HEAD가 가리키는 브랜치를 움직이며 checkout 명령어는 HEAD 자체를 움직인다.

  • reset 명령어는 옵션에 따라 Index와 Working Directory가 변화된다.

$ git log
저장소 반영 내역 확인

% git log --graph
commit간에 연결된 관계를 아스키 그래프로 출력

Head 이동 시 유용한 명령어
$ git log --pretty=oneline

$ git checkout 이동할 커밋의 해시값


Reference

post-custom-banner

0개의 댓글