[Git] git commit 명령의 동작 원리

2022. 4. 22. 18:08Git

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