Home Reset
Post
Cancel

Reset

Reset

3가지 Tree

Git은 일반적으로 세가지 트리를 관리하는 시스템이다.

트리역할
HEAD마지막 커밋 스냅샷, 다음 커밋의 부모 커밋
Index다음에 커밋할 스냅샷
워킹 디렉토리샌드박스
  • 현재 가리키는 포인터

  • 브랜치에 담긴 커밋 중 가장 최근 커밋을 가리킴

Index

  • 바로 다음에 커밋할 것들(Staging Area에 있는 것들)

워킹 디렉토리

  • 실제 파일로 존재한다.
  • 사용자가 직접 파일을 수정할 수 있는 파일로 존재

Reset의 역할

위의 세가지 트리에 대해서 이해하면 Reset을 쉽게 이해할 수 있다.

1단계 : HEAD 이동 (–soft)

먼저 git reset 9e5e6a4 명령은 master 브랜치가 9e5e6a4 를 가리키게 한다.

reset soft

여기서 주목해야할점은 HEAD만 새로운 커밋을 가리키고, Index와 Working Directory는 같은 커밋을 가리킴을 확인할 수 있다.

이 상태에서 git commit 을 실행하면 git commit --amend 명령과 같아진다.

2단계 : Index 업데이트(–mixed)

mixed를 옵션으로 사용하면 다음과 같이 Index까지 새로운 커밋을 가리킨다.

reset mixed

3단계 : 워킹 디렉토리 업데이트(–hard)

–hard 옵션은 워킹 디렉토리까지 업데이트 한다. 워킹 디렉토리에 있는 정보는 이전에 커밋한 기록이 없다면, 영구적으로 삭제되므로 주의해야한다.

reset hard

요약

reset 명령은 정해진 순서대로 세 개의 트리를 덮어써 나가다가 옵션에 따라 지정한 곳에서 멈춘다.

  1. HEAD가 가리키는 브랜치를 옮긴다. (--soft 옵션이 붙으면 여기까지)
  2. Index를 HEAD가 가리키는 상태로 만든다. (--hard 옵션이 붙지 않았으면 여기까지)
  3. 워킹 디렉토리를 Index의 상태로 만든다.

출처

This post is licensed under CC BY 4.0 by the author.

Trending Tags