[Git] git commit 명령의 동작 원리
2022. 4. 22. 18:08ㆍGit
1. 커밋
평범한 커밋과 상태 확인
git-test $ git commit -m "add cat.txt"
git-test $ git log
git-test $ git status
위 상태에 대한 워킹트리, 스테이지, 커밋의 내용을 그림으로 예상하면 다음과 같을 것입니다.
- 위 그림은 잘못된 그림입니다.
커밋 상태 확인2
git-test $ ls -a .git/objects # .git/objects 변환 확인
git-test $ ls -a .git/objects/b1 # b190b6 오브젝트 존재 확인
git-test $ git show b190b6 # b190b6 오브젝트의 정체는 커밋 객체
텅빈 스테이지 확인
git-test $ git ls-files --stage #스테이지가 비어있지 않다
git-test $ git status
- 커밋을 했음에도 불구하고 실제 스테이지 파일은 비어 있지 않음
- git status 명령어는 워킹트리, 스테이지, HEAD 커밋 3가지 공간을 비교합니다.
- git status 명령어가 출력한 clean이라는 의미는 워킹트리와 스테이지 그리고 HEAD 커밋의 내용이 모두 똑같음을 의미함
2. Git tree 객체
수상한 객체 살펴보기
[.git/objects] 폴더에서 b1/, ff/ 폴더말고 7a/ 폴더가 있는 것을 볼수 있었습니다. 이 예제는 7a/ 폴더가 어떤 폴더인지 분석합니다.
git-test $ ls -a .git/objects/
git-test $ ls -a .git/objects/7a/ #objects 폴더 내용 확인
git-test $ git show 7a5459 # 7a5459 객체 확인
git-test $ git ls-tree 7a5459 # 트리 객체의 내용 확인
git-test $ git ls-files --stage # 스테이지 확인
git-test $ git log --oneline -n1 # 커밋 체크섬 확인
git-test $ git cat-file -t b190b6 # 커밋 객체 타입 확인
git-test $ git cat-file commit b190b6 # 커밋 객체 내용 확인
- 커밋 객체를 확인해보면 커밋 메시지와 트리 객체로 구성되어 있다는 것을 볼 수 있습니다.
정리하며
- 커밋을 하면 스테이지의 객체로 트리가 생성됨
- 커밋에는 커밋 메시지와 트리 객체가 포함됨
References
source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저
'Git' 카테고리의 다른 글
[Git] git add 명령의 동작 원리 (0) | 2022.04.22 |
---|---|
[Git] CLI로 rebase 수행 (0) | 2022.04.22 |
[Git] CLI로 3-way 병합하기 (0) | 2022.04.22 |
[Git] CLI로 checkout 하기 (0) | 2022.04.22 |
[Git] CLI로 브랜치 생성하기 (0) | 2022.04.22 |