처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.06.21 37

git reset이 헷갈린다면? Git의 '세 그루의 나무'만 알면 끝나요

Hacker News 원문 보기

git reset만 만나면 손이 떨리는 당신에게

Git을 매일 쓰면서도 git reset이나 git checkout 앞에서는 왠지 긴장되지 않나요? --soft, --mixed, --hard가 각각 뭘 어디까지 되돌리는 건지 헷갈려서, 잘못 눌렀다가 작업물 다 날릴까 봐 조심스럽고요. 사실 이 혼란은 딱 하나의 그림만 머릿속에 그리면 거짓말처럼 풀려요. 바로 Git의 '세 그루의 나무(three trees)'예요. 이 세 가지가 뭔지, 그리고 명령어들이 이 나무들을 어떻게 움직이는지만 알면 Git이 갑자기 투명하게 보이거든요.

Git을 움직이는 세 그루의 나무

여기서 '나무'는 그냥 '파일들의 한 상태(스냅샷)'라고 생각하면 편해요. Git은 세 개의 상태를 늘 들고 다녀요.

첫째는 HEAD예요. 지금 내가 있는 브랜치의 가장 최근 커밋을 가리키는 손가락이에요. 즉 '마지막으로 커밋한 시점의 파일 모습'이죠.

둘째는 인덱스(Index), 다른 말로 스테이징 영역(Staging Area)이에요. 이게 뭐냐면 '다음에 커밋할 후보'를 담아두는 임시 바구니예요. git add를 하면 파일이 작업 폴더에서 이 바구니로 옮겨와요.

셋째는 작업 디렉터리(Working Directory)예요. 지금 내 컴퓨터에서 실제로 편집하고 있는 진짜 파일들이에요. 우리가 코드를 고치는 곳이죠.

일상적인 작업 흐름이 사실 이 세 나무 사이의 이동이에요. 작업 디렉터리에서 코드를 고치고 → git add로 인덱스에 올리고 → git commit으로 인덱스 내용을 새 커밋으로 박으면서 HEAD를 한 칸 앞으로 옮기는 거예요. 그리고 git status가 보여주는 변경 목록도, 사실은 '작업 디렉터리 vs 인덱스'(아직 add 안 한 것)와 '인덱스 vs HEAD'(add는 했지만 커밋 안 한 것)의 차이를 알려주는 거였어요.

reset은 결국 '어느 나무까지 되돌릴까'예요

이제 git reset이 한 방에 이해돼요. reset은 'HEAD를 지정한 커밋으로 옮기되, 거기서 어느 나무까지 같이 따라가게 할까'를 정하는 명령이거든요.

  • reset --soft: HEAD만 옮겨요. 인덱스와 작업 디렉터리는 그대로요. 그래서 방금 커밋을 취소하고 메시지만 다시 쓰거나, 여러 커밋을 하나로 합칠(squash) 때 좋아요. 변경 내용은 고스란히 스테이징된 채 남아요.
  • reset --mixed (기본값): HEAD와 인덱스를 옮겨요. 작업 디렉터리는 안 건드려요. git add를 취소(언스테이징)하고 싶을 때 딱이에요. 내 코드 수정은 안전하게 남아 있고요.
  • reset --hard: HEAD·인덱스·작업 디렉터리 셋 다 옮겨요. 작업 디렉터리의 수정사항까지 깨끗이 지워버리니까, 정말 조심해야 하는 명령이에요. 이게 바로 '작업물 날아갔다'는 사고의 주범이죠.

비슷한 명령들과 헷갈리지 않기

Git엔 비슷해 보이는 명령이 많아서 같이 정리해두면 좋아요. git checkout은 원래 브랜치 이동과 파일 복구를 둘 다 맡아 너무 많은 일을 해서 헷갈렸는데, 그래서 최신 Git은 이걸 git switch(브랜치 이동)와 git restore(파일 되돌리기)로 나눠놨어요. 의도가 분명해져서 훨씬 안전하죠. 또 이미 공유한 커밋을 되돌릴 땐 reset 말고 git revert를 써요. 과거를 지우는 게 아니라 '취소하는 새 커밋'을 쌓는 방식이라 협업 중에 안전하거든요. 이 모든 차이도 결국 '세 나무 중 무엇을 어떻게 건드리느냐'로 설명돼요.

한국 개발자에게 — 외우지 말고 그림으로 이해하세요

많은 분들이 reset 옵션을 그냥 통째로 외우려다 매번 까먹는데요, 세 나무 그림 하나만 머리에 넣으면 외울 필요가 없어져요. '아, --soft는 HEAD만, --hard는 작업 폴더까지' 하고 자연스럽게 떠오르거든요. 실수로 --hard를 쳤더라도 너무 좌절하지 마세요. git reflog라는 명령이 HEAD가 지나온 발자취를 기록해두기 때문에, 대부분의 경우 날아간 커밋을 다시 찾아올 수 있어요. 이 안전망의 존재를 아는 것만으로도 Git이 한결 덜 무서워져요.

한줄 정리

Git은 HEAD·인덱스·작업 디렉터리라는 세 그루의 나무를 움직이는 도구고, reset은 '어느 나무까지 되돌릴지'를 고르는 일이에요. 여러분은 reset과 revert, restore를 상황에 맞게 구분해서 쓰고 계신가요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.