나의 발자취
Git 시간여행이란? checkout, HEAD, master 정리 본문
일단 HEAD와 master의 의미에 대해 알아보자.
HEAD = "what is my repo currently pointing at". 내 레포지토리가 현재 가리키고 있는 곳! ⭐️아주 중요한 역할⭐️
master = 메인 브랜치 이름 (git에서 생성하는 디폴트 이름이 마스터이지만 변경 가능)
체크아웃이란?
커밋 트리 내를 이동하려면 앞에서 말했듯이 내 레포지토리가 현재 가리키고 있는 곳인 HEAD를 이동시켜야한다.
이 HEAD를 이동시키는 명령어가 checkout인데, $ git checkout <commit ID>로 특정한 커밋으로 이동이 가능하다.
즉, 시간여행이 가능하다는것! 이전 커밋한 내역들을 간단히 보려면 $ git log --oneline 으로 조회한다. (뒤에 --all 옵션을 추가할 시 HEAD 뿐만이 아니라 master의 위치 또한 보인다.)
우리가 별도로 HEAD 이동을 하지 않고 커밋을 하면
이와 같이 HEAD 가 master 을 가리키고 있는 상태이다.
체크아웃을 통해 HEAD를 work1으로 옮겨보겠다.
그럼 아래와 같이 마스터와 헤드가 각각 다른 체크포인트를 가리키고 있는 것을 확인할 수 있다.
이 뜻은 work1를 커밋한 시점으로 돌아간다는 것이고, 내용을 추가한 뒤에 다시 add, commit을 해본다. 이 때 커밋 메시지는 "work 1 edit"이라고 하였다.
CID와 commit message가 바뀐 것을 확인할 수 있다.
그렇다면 마스터와 수정 전 work1은 어디에 있을까??
master는 그대로 work2에 있는 것을 알 수 있다. 즉, HEAD가 계속 움직이면서 checkout을 하고 commit을 하기에 master는 영향을 받지 않았다. work 1 또한 고유한 CID를 가지고 잘 보존되어있다.
현재 상태는 아래와 같다.
이제 여기서 attatched head와 detached head에 대해서 알아볼것이다.
attached head (HEAD->master) 상태
$ git checkout master
: 커밋을 하면 head가 이동한다.
detached head (HEAD, master) 상태
$ git checkout <CID>
git checkout master 대신 마스터의 CID를 직접 입력하면 아래와 같이 HEAD와 master가 콤마로 구분되는데, 이때 HEAD와 master은 각각 같은 체크포인트를 가리키고 있고, 서로는 연결되어있지 않다.
: 커밋을 하면 master가 이동한다.
정리하자면,
'앨리스 교육' 카테고리의 다른 글
CSS :: 구성요소, 연동방법 세가지, 캐스케이딩 (0) | 2021.07.05 |
---|---|
HTML :: HTML 기본 구조 (0) | 2021.07.05 |
깃허브 해싱방법 commit ID 외 관련 상식 (0) | 2021.06.24 |
Gitlab & 클린코드 || 03. 클린 코드란? (0) | 2021.06.23 |
Gitlab & 클린코드 || 02. 실무에서 사용하는 깃랩의 유용한 기능 (0) | 2021.06.23 |