Git 특징
- git의 저장소는 파일의 변경사항으로 기록하는 것이 아님
- 그 상태의 기록을 snapshot 형태로 저장함
Snapshot 저장 Flow
- 파일3개와 커밋메세지로 커밋
git add . git commit -m "initial commit"
- 파일 checksum과 함께 저장소에 저장 - 이를 blob이라고 함 (해당 파일들의 checksum을 함께 저장)
- 루트디렉토리, 하위디렉토리의 트리객체를 checksum과 함께 저장
- 커밋개체를 생성하면서 이를 가리키는 메타데이터 및 트리개체를 가리키는 포인터 정보를 커밋 개체에 넣음
- 이를 통해 한번 커밋시 파일갯수 + 2개의 데이터 개체가 생성
- 모든 데이터개체는 snapshot을 동시에 저장
Git branch
- commit 사이를 가볍게 이동할 수 있도록 하는 포인터와 같은 역할을 함
- 기본 구조 (A 커밋 → B 커밋 → C 커밋)
- A커밋이 최초 생성되며, 이후 진행되는 commit의 경우 이전 commit의 parent를 바라봄
- 바라보는 순으로 화살표 표시
Branch 생성하기 (HEAD) 포인터
-
git에는 HEAD 라는 포인터가 존재함
- HEAD는 현재 작업하고 있는 로컬 브랜치의 위치를 나타냄
- 다른 브랜치를 생성하는 경우 (feature/1)
- HEAD 포인터는 feature/1 브랜치를 가리키게됨
git checkout master git checkout -b feature/1
- feature/1 브랜치에서 D 커밋 생성
git checkout feautre/1 git add . git commit -m "D commit"
- HEAD 는 D브랜치를 작업한 feature/1 브랜치 포인터로 이동
- feature/1 → master 브랜치 이동
- 현재 master 브랜치가 최근 상태인 C2 커밋에 HEAD 포인터가 위치함
- master 브랜치에서 D` 커밋
- D 커밋 외 master 브랜치에는 D` 커밋이 존재하여 해당 커밋이 master의 HEAD 포인터에 위치함