티스토리 뷰

Git 정리

Git 원리소개(2)

sh9404 2020. 2. 20. 11:52

오늘은 Github에 대한 설명으로 넘어가기 전에, Git의 몇가지 작동방식에대해 짚고 넘어갈까 합니다!

브랜치의 원리

HEAD는 현재 자신이 어떤 브랜치에 속하는지 가리키는 것이라고 보면 된다고 했었는데요.

정확하게 알기위해 내부 구조를 보면, HEAD디렉토리는 refs/heads/브랜치파일을 가리키고 있고, 이 브랜치 파일은 최신 커밋을 가리키게 됩니다.

 

만약 master 브랜치에서 feature라는 새로운 브랜치를 생성하게 되면,

refs/heads/feature 라는 파일이 생성되고, 이 feature 브랜치로 체크아웃 하게 되면

HEAD는 refs/heads/feature 파일을 가리키게 됩니다.

 

reset의 원리

만약 master 브랜치에서 git reset --hard 명령어를 입력하게 되면,

refs/heads/master 파일이 수정되게 됩니다. 위에서 설명드렸지만, 이 파일은 최신 커밋을 가리키고 있는데요

reset을 하게 됨으로써, 최신으로 가리키고 있는 커밋 주소가 이전 커밋으로 바뀌게 되는 겁니다.

즉, 리셋이라는 행위는 브랜치가 가리키는 최신커밋을 바꾸는 행위라고 생각하면 됩니다.

 

(여기서 그럼 리셋을하면 최신커밋은 삭제되는 건가요? 라고 궁금해 할 수 있는데, 아닙니다!

말그대로 브랜치가 가리키고 있는 최신커밋주소가 바뀌는거지 커밋이 삭제되지는 않습니다.)

 

최신 커밋은 ORIG_HEAD 라는 곳에 보관되게 되며, 이 ORIG_HEAD는 정보를 잃어버릴 수도 있는

위험한 작업을 할 때 HEAD가 가리키고 있던 커밋을 기록해두는 보관소라고 생각하면 좋을 것 같습니다.

 

때문에, 리셋작업을 되돌릴 수도 있습니다.

git reset --hard ORIG_HEAD 명령어를 입력 하시면, 리셋했던것이 되돌아오게 됩니다.

 

리셋에는 크게 3가지 옵션이 있습니다.

  1. git reset --hard (working directory, index, repository 항목 다 삭제)
  2. git reset --soft (repository만 삭제)
  3. git reset --mixed (index와 repository만 삭제, 별도의 옵션을 지정 안할경우 mixed로 작동)

working directory: 작업을 진행하는 곳으로 종종 working copy라고도 합니다.

index: git add를 했을때 이곳에 올라가게 됩니다. staging area라고도 합니다.

repository: 커밋을 했을 때 이 커밋들이 저장되는 곳 입니다.

'Git 정리' 카테고리의 다른 글

Git 정리(8) - Github 원격저장소 만드는 법 및 로컬저장소 연결 방법  (2) 2020.02.21
Git 정리(7) - Github  (0) 2020.02.20
Git 정리(6) - 충돌 해결  (0) 2020.02.19
Git 정리(5) - stash  (0) 2020.02.18
Git 정리(4) - Merge  (0) 2020.02.18
댓글
링크
최근에 올라온 글
최근에 달린 댓글