Git에서 HEAD란? 초보자를 위한 완벽 가이드
안녕하세요.
이번 포스팅은 Git을 사용할 때 자주 마주치게 되는 'HEAD'에 대해 알아보겠습니다. Git을 배우는 과정에서 HEAD라는 용어를 보셨다면, 이 글이 여러분에게 큰 도움이 될 것입니다.
#1. HEAD란 무엇인가?
Git에서 HEAD는 현재 작업 중인 브랜치의 최신 커밋을 가리키는 포인터입니다. 쉽게 말해, HEAD는 "지금 내가 있는 위치"를 나타냅니다. 이것은 마치 책갈피처럼 Git에게 "여기를 보고 있어요"라고 알려주는 역할을 합니다.
#2. HEAD의 기본 개념
Git 저장소를 사용할 때, HEAD는 항상 존재합니다. 기본적으로 HEAD는 다음과 같은 특징을 갖습니다:
- 브랜치 포인터: 일반적으로 HEAD는 현재 체크아웃된 브랜치를 가리킵니다.
- 최신 커밋 참조: HEAD가 가리키는 브랜치의 가장 최근 커밋을 참조합니다.
- 작업 디렉토리의 기준점: 작업 디렉토리의 상태는 HEAD가 가리키는 커밋을 기준으로 결정됩니다.
#3. HEAD 확인하기
현재 HEAD가 어디를 가리키고 있는지 확인하려면 다음 명령어를 사용할 수 있습니다:
git log --oneline
이 명령을 실행하면 가장 위에 있는 커밋(최신 커밋)이 HEAD가 가리키는 커밋입니다. 또는 다음 명령어로도 확인 가능합니다:
git show HEAD
#4. HEAD의 다양한 상태
1. 일반적인 HEAD (Attached HEAD)
일반적으로 HEAD는 브랜치를 가리키고, 그 브랜치는 특정 커밋을 가리킵니다. 예를 들어:
HEAD -> master -> 최신 커밋(abc1234)
이 상태에서 새로운 커밋을 만들면, master 브랜치는 새 커밋을 가리키도록 이동하고 HEAD는 여전히 master를 가리킵니다.
2. 분리된 HEAD (Detached HEAD)
특정 커밋을 직접 체크아웃하면 'Detached HEAD' 상태가 됩니다. 이 상태에서 HEAD는 브랜치가 아닌 특정 커밋을 직접 가리킵니다.
git checkout abc1234
이 명령 후 Git은 "You are in 'detached HEAD' state"라는 메시지를 표시합니다. 이 상태에서 새 커밋을 만들면, 그 커밋들은 어떤 브랜치에도 속하지 않게 되어 나중에 찾기 어려울 수 있습니다.
HEAD를 활용한 상대 참조
Git에서 HEAD를 기준으로 상대 참조를 사용할 수 있어 매우 편리합니다:
- HEAD^: HEAD의 부모 커밋 (바로 이전 커밋)
- HEAD~2: HEAD에서 2단계 이전 커밋
- HEAD~3: HEAD에서 3단계 이전 커밋
예를 들어, 이전 커밋으로 되돌리고 싶다면:
git reset HEAD^
#5. 주요 Git 명령어와 HEAD
1. git checkout
브랜치나 커밋을 체크아웃하면 HEAD가 이동합니다:
git checkout master # HEAD가 master 브랜치를 가리킴
git checkout feature # HEAD가 feature 브랜치를 가리킴
2. git reset
HEAD의 위치를 변경하고 작업 디렉토리의 상태를 조정합니다:
git reset --soft HEAD~1 # HEAD를 한 단계 이전으로 이동, 작업 디렉토리는 유지
git reset --hard HEAD~1 # HEAD를 한 단계 이전으로 이동, 작업 디렉토리도 이전 상태로 변경
3. git revert
HEAD가 가리키는 커밋의 변경사항을 취소하는 새 커밋을 생성합니다:
git revert HEAD # 최신 커밋의 변경사항을 취소하는 새 커밋 생성
#6. HEAD와 브랜치의 관계 이해하기
Git에서 브랜치는 단순히 특정 커밋을 가리키는 포인터입니다. HEAD는 대부분의 경우 브랜치를 가리키고, 그 브랜치가 특정 커밋을 가리킵니다.
새 커밋을 만들면:
- 새 커밋의 부모는 현재 HEAD가 가리키는 커밋이 됩니다.
- 현재 브랜치는 새 커밋을 가리키도록 업데이트됩니다.
- HEAD는 여전히 현재 브랜치를 가리킵니다.
실전 예제: HEAD 활용하기
실수로 한 커밋 되돌리기
git reset --soft HEAD^ # 최신 커밋을 취소하되 변경사항은 스테이징 영역에 유지
3개 커밋 전으로 완전히 되돌리기
git reset --hard HEAD~3 # 3개 커밋 전으로 완전히 되돌림 (주의: 변경사항 모두 삭제)
특정 파일만 이전 상태로 되돌리기
git checkout HEAD^ -- file.txt # file.txt만 이전 커밋 상태로 되돌림
주의사항: HEAD를 다룰 때 알아두어야 할 점
- Hard Reset 주의:
git reset --hard
는 작업 디렉토리의 변경사항을 모두 삭제하므로 주의해야 합니다. - Detached HEAD 상태: 이 상태에서 작업할 때는 나중에 브랜치를 만들어 커밋을 보존하는 것이 좋습니다.
- Push 후 Reset 위험: 이미 원격 저장소에 푸시한 커밋을 리셋하면 팀원들과 충돌이 발생할 수 있습니다.
정리
Git에서 HEAD는 현재 작업 중인 브랜치의 최신 커밋을 가리키는 포인터로, Git 작업의 기준점 역할을 합니다. HEAD를 이해하면 커밋 간 이동, 변경사항 추적, 실수 복구 등 Git의 다양한 기능을 더 효과적으로 활용할 수 있습니다.
이제 Git에서 HEAD의 개념과 활용법을 이해하셨나요? 이 지식을 바탕으로 더 자신감 있게 Git을 사용하시길 바랍니다!
긴 글 읽어주셔서 감사합니다.
끝.
추가 학습 자료
- Git 공식 문서
- Pro Git 책
- 인터랙티브 Git 학습 사이트
'■Development■ > 《Etc》' 카테고리의 다른 글
[Etc] Windows에서 해시(Hash)로 파일 비교하는 방법 총정리 (0) | 2023.01.25 |
---|---|
[Etc] 웹사이트 주소로 IP 주소 알아내는 방법 총정리 (0) | 2020.04.08 |
[ETC] JWT 완벽 가이드 : 개념부터 실적 적용까지 (0) | 2019.09.11 |
[Etc] CBOR 완벽 가이드 : 효율적인 데이터 교환 형식의 모든 것 (0) | 2019.03.12 |
[Etc] CDN 완벽 가이드 : 개념부터 실전 적용까지 (0) | 2016.03.23 |