Upgrade to Pro — share decks privately, control downloads, hide ads and more …

유니크굿컴퍼니 Git 세미나 - Git HEAD and Refs

유니크굿컴퍼니 Git 세미나 - Git HEAD and Refs

Git의 여러 명령어로 Refs 가 변화하는 것을 통해 HEAD 와 Branch 시스템 내부를 간단히 소개했습니다.
유니크굿컴퍼니에서 2022년 6월 8일에 진행한 Git 세미나 진행 슬라이드입니다.

Avatar for Mu-Hun

Mu-Hun PRO

June 08, 2022
Tweet

More Decks by Mu-Hun

Other Decks in Programming

Transcript

  1. HEAD와 refs 1 Refs 를 통해 HEAD 와 Branch 시스템

    내부를 간단히 알아보자 COPYRIGHT 2022. 김무훈
  2. HEAD 의 역할 2 Git 은 어떻게 현재 브랜치를 알

    수 있을까요? HEAD 라는 특수 포인터를 유지하는 덕에 알 수 있습니다. 중략 Git에서 이것은 현재 있는 로컬 브 랜치에 대한 포인터입니다. — Git - Branches in a Nutshell
  3. HEAD 의 역할 2 Git 은 어떻게 현재 브랜치를 알

    수 있을까요? HEAD 라는 특수 포인터를 유지하는 덕에 알 수 있습니다. 중략 Git에서 이것은 현재 있는 로컬 브 랜치에 대한 포인터입니다. — Git - Branches in a Nutshell Git 은 어떻게 현재 브랜치를 알 수 있을까요? HEAD 라는 특수 포인터를 유지하는 덕에 알 수 있습니다. 중략 Git에서 이것은 현재 있는 로컬 브 랜치에 대한 포인터입니다. — Git - Branches in a Nutshell HEAD -> pages/detail index, origin/HEAD
  4. git log git log HEAD 여러분이 잘 아시는 git log

    는 git log HEAD 의 별칭입니다. git log commit id : 어떤 commit id 이전의 이력 Refs 가 바로 commit id 을 알기 쉬운 이름으로 저장해두는 것 입니다. 저장된 자료는 .git/refs 경로에 있습니다. 3 .git/refs
  5. HEAD와 origin/HEAD 4 두가지 의미 1. 현재 브랜치의 Refs를 간접적으로

    알려준다. 2. 현재 checkout 된 commit id 를 가리키는 Ref 리모트 저장소도 HEAD가 있습니다. • origin/HEAD : origin 의 최근 브랜치에서 서버와 마 지막으로 교환한 커밋 refs/heads/master
  6. HEAD와 orgin/HEAD 5 두가지 의미 1. 현재 브랜치의 Refs를 간접적으로

    알려준다. 2. 현재 checkout 된 commit id 를 가리키는 Ref 리모트 저장소도 HEAD가 있습니다. • origin/HEAD : origin 의 최근 브랜치에서 서버와 마 지막으로 교환한 커밋
  7. HEAD와 orgin/HEAD 6 두가지 의미 1. 현재 브랜치의 Refs를 간접적으로

    알려준다. 2. 현재 checkout 된 commit id 를 가리키는 Ref 리모트 저장소도 HEAD가 있습니다. • origin/HEAD : origin 의 최근 브랜치에서 서버와 마 지막으로 교환한 커밋 HEAD 는 ref 를 가리키거나 
 특정 커밋으로 checkout 이후에는 커밋을 직접 가리키고 있습니다. 리모트 저장소도 HEAD를 갖고 있습니다.
  8. Refs 심화 - Refs 직접 수정하기 7 특정 브랜치의 HEAD

    수정하기, 새 브랜치를 특정 브랜치 의 사본으로 만들기 • echo commit id .git/refs/heads/main • 또는 git update ref refs/heads/main commit id git reset 커멘드 내부적으로 git update ref 가 쓰이고 있습니다. ./git/refs/heads 경로 내부에는 브랜치 이름이 담긴 ref 파일이나 서브 브랜치 폴더가 있습니다. https://git scm.com/book/en/v2/Git Internals Git References
  9. Refs 심화 - 간접 Refs 수정하기 8 오른쪽 도식에서 HEAD는

    현재 브랜치를 가리키는 간접 symbolic Refs입니다. 직접 수정해볼까요? • echo .git/refs/heads/main ./git/HEAD • 또는 git symbolic ref HEAD refs/heads/main git switch, checkout 커멘드 내부적으로 git symbolic ref 가 쓰입니다. https://git scm.com/book/en/v2/Git Internals Git References
  10. TIP : commit id 와 commit id 차이 9 캐럿

    과 틸드 모두 부모 커밋을 가리킨다는 점에서 그 의미는 동일하지만 2개 이 상 쓸 경우가 다릅니다. • 캐럿의 경우 n번째 부모를 뜻함 • 틸드의 경우 n번째 상위 부모를 뜻함 머지를 하면서 부모 커밋이 여러개 생길 수 있는데요. 이 차이를 확실히 알아두면 머 지 커밋이 담긴 로그를 다룰 때에 유용히 사용할 수 있다고 합니다. Stackoverflow 답변 참고
  11. 실습 10 • 이전 커밋으로 초기화를 HEAD와 캐럿 문자를 활용해서

    해보자 • 현재 브랜치를 직접 .git/HEAD를 수정해서 전환해보고, 특정 브랜치의 최신 이력 을 .git/refs/* 를 직접 수정해서 변경해보자 update ref, symbolic ref 실습 포함 • 심화 실습 : 깃은 앞서 소개한 쉘 명령어 외에도 update index 등 여러 작은 쉘 스크 립트의 조합으로 운영되는 시스템입니다. 내부를 직접 살펴보면 어떨까요? * 제가 작성한 레포트 Git 사용 시나리오 보고서 참고