[GIT] Checkout 과 reset 비교

MJ·2022년 8월 13일
0

GIT

목록 보기
20/33
post-thumbnail

버전 이동 | 버전 되돌리기

버전을 이동하는 checkout 명령어와 이전 버전으로 시간을 되돌리는 reset 명령어의
차이점을 분명하게 알기 위해서 예제를 살펴 보겠습니다.


💡 Check Out의 이해

현재 그림을 살펴보면, Headmaster branch를 가르키고 있고 master branch에 위치는
커밋 1번 버전 입니다. 그리고 master branch에서 파일을 수정하고 새로 커밋을 저장했어요

새로 생성된 커밋은 2번이고, master branch의 위치가 2번 커밋이 되었어요.
Head commitmaster branch2번 커밋을 가르키게 됩니다.

master branch는 더이상 커밋을 원하지 않고, 이후의 작업들은 새로 저장소를 생성해서
작업을 이어 나가기 위해 google branch를 생성하게 되요

google branch를 생성하고, checkout 명령어를 통해서 저장소를 google로 변경하게 되요.
Head commit 또한 자연스럽게 google branch2번 커밋으로 이동하게 되죠.

이제 google branch에서 한 가지 작업을 진행하고 커밋을 하게 됩니다.
저장소에 3번 커밋이라는 최신 커밋이 생겼어요.

google branch의 현재 위치는 새로 생성한 3번 커밋이며, HEAD 또한 google의 3번
커밋으로 이동하게 되요.

master branch에서 파생된 google branch는 더이상 master branch와 같은 내용을
갖고 있지 않게 되었어요. 서로 다른 버전을 갖게 됩니다.

모든 작업이 종료되고 google branch에서 checkout 명령어를 통해 master branch
이동을 했어요.

저장소가 master branch2번 커밋으로 이동 되고, Head 또한 master branch2번 커밋
으로 이동하게 됩니다. 여지껏 진행한 결과를 보니 문득 이런 생각을 할 수 있습니다.

checkout 명령어란, 버전을 이동한다고 볼 수 있지만 결과적으로는 Head가 이동되는 것이구나!
하고 말이에요. 그리고 더 놀라운 사실은 checkout 명령어는 브랜치 뿐만 아니라, 브랜치의
커밋으로도 이동할 수 있다는 사실이에요.

checkout commit1 이라고 실행하게 되면, branch가 아니라 HEAD1번커밋을 직접적으로
가르키게 됩니다. 이렇게 브랜치가 아닌 커밋으로 이동한 HeadGIT에서는 Detached HEAD
라고 부릅니다.


💡 Reset의 이해


Check OutHEAD를 변경하고, ResetBranch를 변경한다고 생각해도 됩니다.

위 이미지에서 reset commit2 을 실행하게 되면 checkout와 어떤 차이점이 나타날까요?

3번 커밋에 위치에 있던 google branch reset 명령어로 인해 저장소의 버전이 2번 커밋으로
바뀌면서 2번 커밋 이후에 있던 모든 커밋은 사라지게 됩니다.

checkoutHEAD을 이동하는 것이라면, reset은 브랜치를 과거로 되돌린다고 보시면 됩니다.

profile
프론트엔드 개발자가 되기 위한 학습 과정을 정리하는 블로그

0개의 댓글