코드를 복사한 후, 원래 코드와 상관없이 독립적으로 개발할 수 있는 특징
Branch를 이해하기 위해서, Git이 데이터를 저장하는 방법을 알아야 한다.
Git은 데이터를 Change Set이나 Diff로 기록하지 않고 일련의 스냅샷으로 기록
Commit하면 Git은 현 Staging Area에 있는 데이터의 스냅샷을 기록
Git은 현 Staging Area에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메세지와 같은 메타 데이터, 이전 커밋에 대한 포인터를 포함하는 커밋 개체를 저장
⇒ 이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준으로 바뀌었는지 알 수 있음
파일이 3개 있는 디렉토리가 하나 있고, 이 파일을 Staging Area에 저장하고 커밋하는 예제
git commit으로 커밋하면, 먼저 루트 디렉토리와 각 하위 디렉토리의 트리 개체를 체크섬과 함께 저장소에 저장
커밋 개체를 만들고 메타데이터와 루트 디렉토리 트리 개체를 가리키는 포인터 정보를 커밋 개체를 넣어 저장
⇒ 필요하면 언제든 스냅샷 생성 가능
$ git add README test.rb LICENSE
$ git commit -m 'The initial commit of my project'
커밋과 트리 데이터
커밋 과정을 마치고 나면 다섯 개의 데이터 개체 생성
