커밋
커밋의 개념
커밋(commit)은 git의 버전 관리의 기본 단위로, (1) 파일 변경 사항을 저장소에 기록하는 작업 (2) 특정 시점에 저장소에 기록된 상태 를 의미한다.
커밋 ID
커밋은 메시지와 별도로 자신만의 고유한 ID를 가지고 있다. 이 ID는 SHA-1 해시 값의 40자리 문자열로 이루어져있다.
1
2
3
4
git log -s
>> commit c175163158d0e78f259b64ffb76b72a985e7f697 (HEAD -> main)
>> commit cbf9cc608bbd1656ba9008c7e25c94493700a91b
>> commit 37b90cce0f841afd5e6368f02c4a7e77810bf127
커밋의 구성 요소
구성 요소 | 설명 |
---|---|
커밋 ID | 커밋을 고유하게 식별하는 SHA-1 해시 값 (40자리 문자열) |
작성자 정보 | 커밋을 만든 사람의 이름과 이메일 |
작성 날짜 | 커밋이 작성된 날짜와 시간 |
커밋 메시지 | 변경 사항에 대한 설명으로 커밋시에 작성하는 것. 변경 의도를 표현하는 중요한 것. |
트리(Tree) | 해당 커밋에서 관리하는 파일 및 디렉터리의 스냅샷 구조. |
부모 커밋 | 해당 커밋의 직전 커밋 ID. 이것을 통해 이력을 알 수 있다. 첫 번째 커밋은 부모가 없다. |
커밋의 동작 원리
(1) 스냅샷 저장
-변경 파일 뿐만 아니라 프로젝트 전체 스냅샷을 기록한다.
-다만 저장 효율성을 위해 동일한 파일은 중복 저장하지 않는다.
(2) 연결된 그래프
-커밋은 부모 커밋과 연결된 DAG(Direct Acyclic Graph, 방향성 비순환 그래프) 구조를 형성한다.
-이를 통해 프로젝트 변경 이력을 추적할 수 있다.
(3) HEAD 포인터
-현재 체크아웃된 브랜치를 가리킨다.
-새로운 커밋이 생성될 때마다 해당 브랜치의 HEAD가 새 커밋을 가리키도록 한다.
(참고) 커밋 ID의 사용
커밋 ID는 40자리 문자열로, 명령어에서 그 모든 ID값을 입력하는 것은 오류 가능성이 높다. 알고리즘에 따라 앞의 4자리만 적어도 겹칠 가능성이 적으므로, 커밋의 ID값을 직접 사용할 때에는 보통 문자열의 앞 4자리를 적는다.