1. branch의 원리, Head의 원리
오브젝트 id란, 40개의 숫자의 영문자의 조합으로 이루어진 것으로 커밑 당시의 폴더구조와 파일내용의 전체 상태를 가르키는 참조값이다.
・git init
-.git/HEAD 파일이 생성되고 그 파일은 .git/refs/heads/master를 값으로 지닌다.
(master는 디폴트 브랜치)
-아직 커밑을 한번도 하지 않았기 때문에,.git/refs/heads/master파일은 존재하지 않는 상태
-.git/HEAD : 현재 속해있는 브랜치의 디렉토리 주소(.git/refs/heads/[브랜치 이름])를 값으로 지니게 됨.
-.git/HEAD과 .git/refs/heads/master는 바이너리 값이아니라 모두 텍스트 값을 갖는다.
・git commit
-.git/refs/heads/master는 최신 커밑 상태의 오브젝트 id값을 가지게 됨.
・git branch exp
-.git/refs/heads/exp 파일을 생성하고, 그 파일은 최신 커밑 상태의 오브젝트 id값을 가지게 됨.
-이때 드는 의문이, 처음으로 만들어진 브랜치는 최신 커밑이 없는데 어떤 오브젝트 id를 갖나? 라는 것인데,'최신' 커밑 상태의 오브젝트 id값에서 의미하는 바와 같이, 최초에 브랜치가 생성되면 아직 exp 의 내용에 변화가 없기때문에 master의 최신 커밑 상태의 오브젝트 id값과 exp의 최신 커밑 상태의 오브젝트 id값은 동일하게 됨.
-아직 브랜치가 옮겨지지 않았기 때문에 .git/HEAD 파일은 .git/refs/heads/master를 값으로 지닌다.
・git checkout exp
-브랜치의 위치가 변화했기 때문에, .git/HEAD 파일은 .git/refs/heads/exp를 값으로 지닌다.
・git commit
-.git/refs/heads/exp는 최신 커밑 상태의 오브젝트 id값을 가지게 됨.
'DevOps > Git' 카테고리의 다른 글
[Git]rebase의 동작원리, rebase 실행해보기, rebase의 충돌 (0) | 2018.03.24 |
---|---|
[Git]git remote, git push, git clone, 하나의 원격저장소를 2개의 지역저장소가 사용하는 방법(push와 pull) (0) | 2018.03.24 |
[Git]fast-forward 병합과 recursive 병합 (0) | 2018.03.24 |
[Git]branch 만들기, branch 간의 정보확인, merge, merge 충돌, stash (0) | 2018.03.24 |
[Git]add, commit, status의 원리 (0) | 2018.03.24 |