저번 포스팅 git add 원리에 이어서 git commit 의 원리를 Gistory를 통해 이해해보자. 원본 강의는 여기를 참고하자.
저번 시간의 마지막 화면은 이렇다. 현재 work1 이라는 동일한 내용을 가지고 있는 work1.txt, work2.txt 를 add 해서 staged 상태로 올린 단계이고 이제 work1.txt, work2.txt를 커밋해보자.
커밋을 하니 몇 가지 새로운 파일들이 추가가 되었다. 그 중에서 커밋으로 새롭게 생긴 objects 들 중 맨 위에 있는 , cb~로 시작되는 해쉬값이 있는 경로를 클릭해보자.
자세히 보면 커밋할 때 작성한 커밋 메세지 work1,2 commit 이 존재하고 누가 커밋했는지 author, committer 에 대한 정보도 존재한다. 근데 눈에 띄는건 tree라는 요소다. tree에 또 매핑된 object 경로가 있다. 자세히 보니 새롭게 생긴 objects들 중 나머지 하나인 0f~로 시작하는 해쉬값에 매핑된 objects 이다. 해당 objects 로 가보자!
해당 objects를 보니 이전 git add 할 때 만들어진 objects 경로(a6~로 시작하는)가 매핑되어 있는 것을 볼 수 있다. 결국 이전에 git add한 파일들을 가리킨다. 이전에 add 할 때 이름은 다르되(work1.txt, work2.txt) 파일 내용은 work1으로 동일하게 add 했기 때문에 동일한 objects 경로를 가리키는 것을 알 수 있다.
그렇다면 임의의 디렉토리를 하나 추가한 후 또 파일 내용은 똑같이 work1 이고 파일 명만 work3.txt로 만들어서 add, commit을 해보자.
해당 탭은 이번에 새롭게 커밋한 objects 경로이다. 보니 parent라는 특이한 요소가 생겼다. 자세히 살펴보니 parent에 써져있는 경로가 이전 커밋한 objects 경로이다. 즉, 새로운 커밋의 parent에는 직전의 커밋 objects 경로가 매핑되는 것이다!
이제 새로운 커밋에 대한 정보를 보기 위해 해당 탭의 tree라고 적혀있는 objects 경로로 이동해보자.
blob은 이전에도 확인했던 요소인데 특이하게 tree가 또 있다. 자세히 보니 tree에 매핑된 값을 보니 d1 이다. d1은 우리가 새로운 파일 work3.txt를 만들기 위해 추가했던 디렉토리였다. 즉, 중간에 디렉토리가 파일 경로에 추가되면 위와 같이 tree 요소가 추가되는 것을 알 수 있다. 그럼 저 tree를 선택해보자. 어딜로 이동할까?
보니 아까 d1 디렉토리에 만든 work3.txt로 이동하게 된다. 이 때 work3.txt의 blob은 그럼 뭘까? 바로 'work1' 이라는 텍스트 파일 내용이 담겨 있는 objects 즉, 맨 처음에 만들었던 work1.txt, work2.txt 와 동일한 objects 경로이다! 왜냐면 'work1' 이라는 동일한 텍스트 파일 내용을 담고 있기 때문이다.
매우 헷갈릴지도 모른다. 만약 너무 헷갈리고 무슨소린지 잘 모르겠다면 강의로 다시 되돌아가서 들어보자. 필자도 시간이 지난 후에 내가 쓴 글이지만 이해를 못할 수도 있다. 하지만 괜찮다! 모른다고 다시 강의 들으러 가는 것은 죄악이 아니다!!
'Git' 카테고리의 다른 글
[Git] 무시무시한 conflict를 해결해보자 (0) | 2021.08.28 |
---|---|
[Git] Merge 할 때, Fast-forward 방식은 무엇인가? (2) | 2021.08.27 |
[Git] branch 관련 명령어 (0) | 2021.08.27 |
[Git] Gistory를 통해 git add 의 원리를 이해해보자 (0) | 2021.08.26 |
[Git] commit 한 이력 살펴보고 과거로 돌아가기 (0) | 2021.08.26 |