GIT

GIT : HEAD란? - 개념, 설명

A Thin Idea 2023. 1. 16. 12:00
반응형

GIT : HEAD란? - 개념, 설명 1

 

 

브랜치 HEAD

브랜치 생성에 대해 알아보기 전에 알아야 할 개념이 한 가지 더 있습니다. 바로 HEAD입니다. 예를 들어 git log를 실행하면, 모든 커밋 이력이 보여지고 검토할 수 있습니다. 대문자로 된 HEAD가 깃 용어 중의 하나이고 특히 저장소에서 현재 위치를 가리키는 포인터입니다. 그리고 브랜치 레퍼런스를 가리킵니다.

아직 얘기하지 않은 브랜치 레퍼런스라는 용어가 있습니다. 브랜치를 책의 책갈피라고 생각할 수 있습니다. 책의 여러 위치에 다양한 북마크를 가질 수 있습니다. 어느 시점에서든, 이것들 중에서 단 하나만 펼쳐질 수 있습니다. 여러 페이지를 한번에 열 수는 없습니다. 단지 한 페이지만 활성화되고 한 페이지만 읽히거나 보여질 수 있습니다. 북마크한 페이지가 펼치는 것이 바로 HEAD가 가리키는 것입니다. HEAD는 보거나 확인하고 있는 현재 위치를 말하는 것으로 듣게 되는 보편적인 용어입니다.

아직 HEAD로 어떤 작업도 하지 않았고 어떤 브랜치도 만들지 않았습니다. HEAD는 언제나 master 브랜치에서 가장 최근에 커밋한 브랜치를 가리킵니다. master 브랜치에 있는 모든 것들의 HEAD는 master를 가리킵니다. HEAD는 master를 가리키며 화살표의 의미입니다. 여기 있는 이 모든 것들이 master 브랜치입니다. 

이것을 브랜치의 팁이라고 하고 가장 마지막 가장 최근에 커밋한 것을 말합니다. HEAD는 브랜치 포인터를 가리킵니다. 만약 더 많은 브랜치를 갖고 있다면, 다른 브랜치로 전환했다면 예를 들어 Ethel의 브랜치로 전환한다면, HEAD는 Ethel의 브랜치의 팁을 가리킵니다, 또는 Fitz의 브랜치를 보고 전환을 합니다.

이제 이것이 이 방대한 책에서 펼친 페이지입니다. 이것이 저장소에서 현재 활성화된 곳이고 HEAD 포인터는 거기에 있습니다. 이 용어는 플레이 헤드에서 유래한 말입니다. 이전 테이프 기계나 테이프 레코더같은 것들에서 불렀던 것입니다. 전문분야도 아니고 하지만 약간 아날로그적인 의미가 있습니다. 

확실하게 하기 위한 다이어그램이 하나 더 있습니다. 확실하게 해 주지는 않지만 좀더 연습하는 것입니다. 반복해서 말하자면, HEAD는 브랜치 포인터에 대한 레퍼런스 포인터이고 브랜치 포인터는 현재 브랜치가 있는 위치입니다. 책의 북마크와 같습니다. 여러 개의 브랜치를 가질 수 있고 각 브랜치는 브랜치 레퍼런스를 갖고 있으며 그것들은 브랜치가 있는 위치를 가리킵니다.

 

 

GIT : HEAD란? - 개념, 설명 2

 

master 브랜치에서 시작해 보겠습니다. 실행했던 모든 프로젝트에서 지금 master에 있고 HEAD는 master를 가리키고 있습니다. 좀더 작업을 하고 커밋을 실행합니다. 여전히 마스터에 있습니다. 이 브랜치 포인터는 새로운 커밋으로 업데이트 하고 HEAD는 여전히 같은 위치인 master를 가리킵니다.

하지만, 실험적인 것을 시도하기로 하고 새 브랜치를 만들 것을 결정합니다. 웹사이트에 다크모드를 추가하기 위해 새 브랜치를 만듭니다. 브랜치를 만드는 방법은 곧 배울 겁니다. 다크모드는 여전히 같은 커밋을 master로 가리키고 있습니다. 그것들은 같은 포인트에 있습니다. 2개의 브랜치 레퍼런스가 같은 것을 가리키고 있습니다.

HEAD는 다크모드를 가리키고 있는데 그 뜻은 지금 다크모드 브랜치에 있다는 뜻입니다. 새로운 커밋을 실행하기 위해, 새로운 작업을 합니다. 이제 분리됩니다. master는 여전히 같은 곳에 있고 이 커밋을 가리키고 있습니다. 다크모드는 이제 새 커밋을 참고하고, HEAD는 여전히 다크모드를 가리키고 있습니다.

다크모드에 있는데, 이 위치에서 만약 새로운 작업을 한다면 새 커밋은 다크모드에 있고, 이 다크모드 포인터는 이전 작업이 아니라 새 커밋으로 업데이트합니다. 그리고 어느 시점의 커밋으로 돌아갈 수 있는데, master로도 돌아갈 수 있습니다. 아직 북마크를 가지고 있습니다. 그것이 바로 이 레퍼런스입니다.

그리고 이 브랜치로 바꾸면서 페이지를 열 수도 있습니다. HEAD는 master를 가리키고 있고 다크모드로 갈 수도, 다시 master로 돌아갈 수도 있습니다. HEAD는 현재 열려있는 것이고 지금 저장소에서 확인하고 있는 것입니다. 그리고 수백 개의 다양한 브랜치를 가질 수 있습니다. 각 브랜치는 브랜치 레퍼런스를 갖고 있고 남긴 위치를 가리키고 있습니다. 이것이 바로 핵심 내용입니다. 브랜치는 일부 커밋에 대한 레퍼런스입니다.

 

 

GIT : HEAD란? - 개념, 설명 3

 

그리고 좀더 많은 커밋을 실행하면, 심지어 우리가 master 브랜치에 있고, 새 커밋을 실행하면 master 포인터는 이제 새 커밋을 가리키기 위한 변화와 업데이트를 반영합니다. 원래는 유일한 커밋이었고, master는 이 커밋을 가리키고 있었습니다. 그리고 더 최근, 더 최신의 커밋을 가리켰습니다. 그리고 이제 여기 있는 이 커밋을 가리키고 있습니다. 이것들은 모두 master 브랜치에 있고 이 master 브랜치가 가장 최근에 커밋한 브랜치입니다. 

그리고 이제 어느 시점에서, 다른 브랜치를 생성할 수 있고 다른 방향으로 분리할 수 있으며 이 모든 다양한 브랜치 포인터들은 다른 커밋을 가리키고 있고 HEAD를 움직여서 다른 브랜치로 전환할 수 있습니다. 다음에 나올 관련된 명령어로 이런 작업을 보여드리면 훨씬 더 잘 이해할 수 있을거라 생각합니다.

반응형