Git을 사용하다 보면 실수로 커밋을 잘못했거나, 특정 커밋으로 돌아가야 하는 경우가 생깁니다. 이럴 때 유용한 명령어가 git reset이죠. 하지만, git reset이 정확히 어떻게 동작하는지 헷갈릴 때가 많습니다. 이번 글에서는 git reset의 동작 원리를 그림과 함께 자세히 알아보겠습니다.
Git에서 HEAD와 브랜치는 어떻게 동작할까?
우리는 이전에 **브랜치(branch)**는 특정 커밋을 가리키는 포인터이고, HEAD는 특정 브랜치를 가리키는 포인터라는 것을 배웠습니다. 즉, HEAD는 브랜치를 통해 커밋을 간접적으로 가리키고 있는 것이죠. 이를 이해하면 git reset이 왜 특정 커밋을 가리키도록 HEAD를 변경하는지 쉽게 알 수 있습니다.
git reset을 실행하면 HEAD는 어떻게 변할까?
지금 4개의 커밋을 만든 상태라고 가정해 보겠습니다.
0fc1 -> 23kd -> 9033 -> 43kf (현재 위치)
이 상태에서 다음 명령어를 실행하면 어떻게 될까요?
git reset 9033
이때, HEAD가 9033 커밋을 가리키게 됩니다. 하지만 중요한 점은 HEAD가 직접 커밋을 가리키는 것이 아니라, master 브랜치를 통해 간접적으로 가리킨다는 것입니다.
git reset을 하면 발생하는 변화
- HEAD는 여전히 같은 브랜치를 가리킨다.
- 하지만 HEAD가 가리키는 **브랜치(master)**가 다른 커밋을 가리키게 된다.
결과적으로 HEAD가 가리키던 커밋이 바뀌는 것처럼 보이게 되는 것이죠.
git reset을 하면 이후의 커밋은 사라질까?
많은 분이 git reset을 실행하면 이후의 커밋이 사라진다고 오해합니다. 하지만 실제로는 이후의 커밋이 삭제되지 않습니다! 예를 들어, 우리가 git reset 9033을 실행했다고 해도, 43kf 커밋은 여전히 존재합니다. 단지 master 브랜치가 더 이상 43kf를 가리키지 않을 뿐이죠. 즉, 커밋은 지워지지 않고 남아 있으며, 단지 브랜치가 특정 커밋을 가리키는 방식이 바뀔 뿐입니다.
git reset은 미래의 커밋으로도 이동할 수 있다!
git reset은 과거의 커밋으로만 이동하는 것이 아닙니다. 현재 HEAD가 가리키는 커밋 이후의 커밋으로도 이동할 수 있습니다. 예를 들어, git reset을 실행한 후 다시 원래 커밋으로 돌아가고 싶다면 다음을 실행하면 됩니다.
git reset 43kf
이렇게 하면 master 브랜치가 다시 43kf를 가리키게 됩니다.
정리: git reset의 핵심 포인트
- git reset을 실행하면 HEAD가 직접 변경되는 것이 아니라, HEAD가 가리키는 브랜치(master)의 위치가 변경된다.
- git reset을 실행한다고 해서 이후 커밋이 삭제되는 것은 아니다. 단지 브랜치가 해당 커밋을 가리키지 않을 뿐이다.
- git reset은 과거뿐만 아니라 현재 HEAD 이후의 커밋으로도 이동할 수 있다.
이제 git reset을 좀 더 자유롭게 활용할 수 있겠죠? 앞으로 커밋을 다룰 때 실수를 하더라도 걱정하지 말고 git reset을 활용해 보세요!
'Data-Driven System Development > Git' 카테고리의 다른 글
Git Merge의 동작 원리 완벽 이해하기 (0) | 2025.03.21 |
---|---|
Git Reset과 Checkout의 동작 원리 완벽 이해하기 (0) | 2025.03.21 |
Git 브랜치와 HEAD 개념 정리 (0) | 2025.03.20 |
Git 브랜치와 원격 저장소(Remote Repository) 개념 정리 (0) | 2025.03.20 |
Git Merge Conflict 해결 vs. 취소 방법 (0) | 2025.03.20 |