본문 바로가기

GIT

GIT CLI - reset vs checkout

반응형
SMALL

이 글은 생활코딩의 GIT CLI - Branch & Conflict 수업을 듣고 작성한 글 입니다.

우리가 git init 명령어를 통해서 저장소를 만들게 되면

HEAD가 master branch를 가르키게 된다.

이는, 저장소의 데이터가 있는 숨김폴더 .git에 들어가서 HEAD 파일을 열어보면 알 수 있다.

HEAD가 현재 어떤 branch에 있는가를 뜻한다.

이 저장소가 어떤 버전인가는 master를 기준으로 한다.

새로운 branch를 만들었을 때,

새 branch의 버전은 내가 branch를 만들 때 있었던 branch가 가르키던 버전이다.

master에서 branch를 만들었다면 branch를 만들 때(git branch new_branch)

HEAD가 master를 가르키고, master가 가르키는 버전이 new_branch의 버전(commit)이다.

checkout을 하게 되면 HEAD가 new_branch를 가르키게 된다.

이 때 new_branch에서 새로운 버전을 만들게 되면,

new_branch는 master와 다른 버전을 가지게 된다.

checkout과 reset의 차이점

1.checkout : HEAD를 제어한다.

    • checkout master 하게되면 HEAD가 master를 가르키고,
    • 이 때 버전은 master가 가르키는 버전이 된다.

2.reset : HEAD가 가르키고 있는 branch를 제어한다.

    • reset master 하게되면 branch가 가르키는 버전을 master가 가르키는 버전으로 바꾼다
    • reset은 삭제의 의미가 아니라, 삭제의 효과를 가져오는 느낌이다.
    • 위 이미지에서 google branch에서 git reset master 하게되면 master가 가르키는 버전은 2로 google branch가 가르키는 버전이 바뀌게되고, 3번을 가르키는 branch가 없는 상태이기 때문에, 3번이 사라지는 효과를 가져오게 된다.

[전체 요약]

HEAD : 이 저장소가 어떤 branch를 가르키는가

master branch : 현재 이 저장소의 버전

신규 branch 버전 : HEAD가 가르키는 branch가 가르키던 버전을 그대로 가르키게 된다.

checkout : HEAD가 가르키는 것을 바꾸는 것, commit id를 가르킬 수도 있다.

    • detached : HEAD가 branch가 아닌 commit id를 가르키는 것

reset : HEAD가 가르키는 branch에서 다른 branch또는 commit id(version)으로 reset을 하게되면 HEAD가 가르키는 branch가 다른 branch가 가르키는 버전을 바라보게되고, 기존의 버전을 바라보는 branch가 하나도 없다면 기존에 가르키던 버전이 삭제되는 것 처럼 보이는 효과를 가지게 된다.

강의에서 설명하는 것을 제가 이해한 대로 설명해보았습니다.

반응형
LIST