HEAD와 브랜치의 관계, 더 나아가 git reset의 개념에 대해서 추가로 알아보도록 하자. 글로만 쓰는 것보다 이미지와 함께 설명하면 더 좋을 듯 해서 피그마로 후다닥 그려 보았는데...🥲 이해에 도움이 될지 모르겠다.
브랜치(branch)의 개념
- 브랜치는 커밋을 가리키는 포인터이다.
- 아래 이미지와 같이 세번째 커밋을 한 후 premium 브랜치를 새로 만들어서, main 브랜치와 각각의 작업을 수행했다면 main 브랜치와 premium 브랜치는 각각 다른 커밋을 가리키는 포인터인 것이다.
헤드(HEAD)의 개념
- HEAD는 이러한 브랜치를 가리키는 포인터이다.
- HEAD가 가리키는 커밋에 따라 working directory가 달라진다.
- 따라서 아래 이미지의 경우, HEAD가 main 브랜치를 가리키고 있으므로 해당 브랜치의 다섯번째 커밋이 working directory에 보여진다. 만약 git checkout premium 커맨드를 사용하여 브랜치를 변경하면 그에 따라 working directory 내용도 달라질 것이다.
git reset 개념
git reset을 통해서 main 브랜치를 네번째 커밋으로 되돌린 상황이라면,
- main 브랜치가 가리키는 커밋이 이전 커밋으로 변경된다.
- HEAD는 브랜치를 가리키는 포인터이므로 main 브랜치와 함께 이동한다.
추가로 알아야 할 사항은 git reset 커맨드는 이후 버전을 모두 삭제하고 과거의 커밋으로 돌아가는 것이 아니며, 커밋 사이를 자유롭게 이동할 수 있는 기능을 한다. 그러므로 git reset을 해서 이전 버전으로 돌아간 후에도 이후 버전의 커밋 아이디값을 알고 있다면 다시 돌아갈 수 있다.
cf. git reset 과 git checkout의 차이점
git reset 커맨드는 브랜치가 다른 커밋을 가리키게 하는 명령어라면, git checkout 커맨드는 HEAD가 다른 커밋 또는 브랜치를 가리키게 하는 명령어이다. 아직까지는 git checkout [브랜치명] 커맨드를 통해서 해당 브랜치로 이동하는 것만 설명을 했는데, [브랜치명] 대신에 특정 [커밋아이디]를 입력하게 되면 HEAD가 브랜치와는 별개로 해당 커밋을 가리키게 된다. 이런 상태의 HEAD를 Detached HEAD 라고 부른다.
+ 막간을 이용한 홍보
나는 코드잇이라는 온라인 강의 사이트를 통해서 git 강의를 듣고 있다. 예전 python 강의를 들을 때부터 느낀 거지만, 설명이 쉽고 강의 길이가 짧아서 수강하는 데에 부담이 적다. 그리고 중간에 퀴즈를 풀거나 텍스트로 정리를 해주는 강의가 섞여 있는데, 이게 분위기 전환이 되기도 하고 또 아직까지 공부한 내용을 복습할 수 있는 시간이라 마음에 든다.
코딩 강의를 들으면 늘 작심삼일로 끝나곤 했었는데, 코드잇은 신기하게도 질리지 않아서 1년 넘게 꾸준히 수강하고 있다. 이제는 누군가 취미가 뭐냐고 물으면 온라인 강의 듣는 거라고 자신있게 말할 수 있게 되었다. 나 혼자만 알기에 아까운 코딩 교육 온라인 강의~ 내돈내산이지만, 코딩 공부하고 싶은 초보자들에게 강력추천한다.
코딩이 처음이라면, 코드잇
월 9,900원으로 Python, JavaScript, HTML/CSS 등 3,000개 이상 프로그래밍 강의를 배워보세요!
www.codeit.kr
※ 진짜 정말 진심으로 아무런 댓가를 받지 않고, 내가 직접 결제했음! 여긴 추천인 이벤트 같은거 없나?
'개발 도구 > Git' 카테고리의 다른 글
Remote Repository 내용을 merge하지 않고 가져오기(git fetch) (0) | 2022.11.30 |
---|---|
머지(Merge)의 두가지 종류(Fast-forward & 3-way)와 규칙 (0) | 2022.11.23 |
브랜치(branch)를 깃허브(github)에 push하기 (0) | 2022.11.21 |
머지 취소하기(git merge --abort) (0) | 2022.11.20 |
컨플릭트(Conflict) 났을 때 해결하는 방법 (0) | 2022.11.19 |
댓글