HEAD 개념, checkout 통해서 버전 넘나들기

도토리·2023년 4월 6일
0

git & github

목록 보기
7/10

git의 HEAD

  • 특정 브랜치의 가장 최신 커밋
  • switch 명령어를 통해 브랜치를 변경할 때마다 각 브랜치의 HEAD에 위치하게 된다.

아래와 같은 커밋 히스토리가 존재한다고 하자.


각 말풍선이 가리키는 것은 특정 branch의 HEAD이다. 파란색 말풍선이 가리키는 커밋은 main 브랜치의 HEAD이다.

'git switch main' 실행 후 소스트리를 보면, 맨 아래에서 3rd 커밋에 하얀 점이 있는 것을 볼 수 있다. main의 HEAD인 것!


checkout을 사용해서 이전 버전으로 돌아가기

  1. 커밋 히스토리는 그대로 놔둔 채, 과거 버전으로 가기(과거 버전의 파일을 보겠다는 뜻)
git checkout HEAD(^ 또는 ~)
또는 
git checkout (커밋해시)

'^' (또는 '~')의 갯수만큼 이전으로 이동한다. 예를 들어, git checkout HEAD^^^는 이전으로 3만큼 이동, git checkout HEAD~5는 이전으로 5만큼 이동

EX) delta-branch에서 이전으로 1만큼 이동하기

git switch delta-branch
git checkout HEAD^

  1. 'git checkout HEAD(^ 또는 ~)' 통해서 이동한 것 되돌리기
    마치 ctrl+z한 것과 같이 동작한다.
git checkout -

EX) 나는 'git checkout HEAD(^ 또는 ~)'를 3번하였다. git checkout HEAD^ -> git checkout HEAD^ -> git checkout HEAD^^

'git checkout -'을 실행한 결과,

'git checkout HEAD^^' 하기 이전으로 돌아갔다.

  1. 브랜치의 맨 끝 단도 아닌데 왜 HEAD라고 써있지?
    익명의 브랜치를 만들었고, 이 브랜치의 끝 단에 위치해있는 것이다.

    증거1. delta-branch, ... 등 브랜치에 위치해 있는 것이 아니다.

    그리고 해당 커밋의 커밋해시는 4697b11...

    증거2. 'git branch'로 branch 목록을 본 결과,

무엇을 할 수 있는가?

  • delta-branch로 돌아가려면?
    다른 branch에 위치해 있는 것이기 때문에, switch하면 된다. 'git switch delta-branch'

  • 이전 버전으로 돌아가서 새로운 브랜치를 만들고, 커밋을 하나 생성해보자. 예를 들어 아래와 같은 상황을 만들어보자.

우선, git switch beta-branch -> git checkout HEAD^

git branch gamma-branch
git switch gamma-branch


  • HEAD를 사용해서 reset하기
    예를 들어, 아래와 같이 delta-branch에서 검정 화살표가 가리키는 커밋에 대해 reset해보자.
git switch delta-branch
git reset --hard HEAD^^

참고) 기존 방법

git switch delta-branch
git reset --hard (해시커밋)

0개의 댓글