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값을 가지게 됨.
![](https://postfiles.pstatic.net/MjAxNzExMjVfNTgg/MDAxNTExNjAxODg2NDUz.zbTKy8o_MOICUj2sTV2ryL1aeMRHRa5SLkVQ7SOrhC8g.cjRi5RPWkMHMSO84V0_Gv7fiV9CigvaSDtvLFuWUy4sg.PNG.da91love/1.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjVfNjUg/MDAxNTExNjAxODg2NzQy.QHQmT39LrYtP4b6CrnmHkSukSeXz2hcdhsMgH8IuOD4g.g0nb0LVZEETRgCXQTrBhAYQDT2ee8KLW8i6wHjI0HUog.PNG.da91love/2.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjVfNiAg/MDAxNTExNjAxODg3MDcy.osS4x5UQ9BdqhixYbLUpiwNHLqW7AOUAyZH1PBS5eOIg.c0c7UI--1cDaWSBVixj3Eezx18kV9WCHSqDt_8m1fN0g.PNG.da91love/3.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjVfOTgg/MDAxNTExNjAxODg3Mzc1.dD1mh-t_NbBOB1STRh28QVgs9RGiOHlFK5QeZYaTFKAg.mAtxfdozdp8l7QmSZoyA47DK4vnZ5X_tojlM5ZLpnDUg.PNG.da91love/4.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjVfMjY1/MDAxNTExNjAxODg3Njk0.5R480T8XtVQhdG99ptux5wzzMq0V9wLuKSRCAlrkyxIg.1prih5XdpNYERsHY9xi0MI4TAnjcZUSa7v9bm6EyTUkg.PNG.da91love/5.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjZfMjAw/MDAxNTExNjk1OTQ5MTQz.l8_0eeOxJbjmTSRvhFERXPyj0LQ2yH6kP5oNjjHx5Gwg.ecqCpS_-IMdcrFBA20rAJnnKsEnvkehwXYuGgQOHVQ4g.PNG.da91love/5131.png?type=w2)
![](https://postfiles.pstatic.net/MjAxNzExMjZfMjQw/MDAxNTExNjk1OTQ5NDI4.q9T1sY4TIBYF0e3XfjSTeRSF6vs0Q6_pEs6keenS2qIg.p5_Qf7Yk1VgpEQ2vMF_5k65uiwO4ns47L4Pz037HZosg.JPEG.da91love/soft_mixed_hard.jpg?type=w2)
'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 |