[Git - 지옥에서 온 git] 4일차 - git의 원리 공부 (branch와 HEAD)

2022. 8. 9. 16:14개발공부 기강잡자/Git

Git 의 HEAD와 branch의 원리, 구조

1. HEAD

git init을 하면 생기는 HEAD 파일에는 (일반 텍스트 파일)

ref : refs/heads/master

라고 기록되어있다.

이는, 현재 HEAD가 가리키는 branch를 의미한다. (현재 HEAD 파일은 master 파일을 가리킨다.)

 

그리고 refs/heads/master 파일에는 가장 최신 commit의 object id 가 기록되어있다. 

git log

= master branch의 가장 최신 commit을 나타내는 (HEAD -> master)

 

1. 이처럼 git log를 했을 때, 가장 최신 커밋이라고 알려줄 수 있는 이유는 git의 HEAD 파일이 가리키는 master 파일에 가장 최근에 commitobject id를 가지고 있기 때문이다.

2. 이전 커밋은 가장 최근 commitobject 가 가지고 있는 parent 값을 통해 탐색할 수 있다.


2. Branch

git branch exp 명령을 통해 branch를 생성한 경우, refs/heads/ 디렉토리 아래에 exp라는 파일이 생성된다.

refs/heads/exp -> exp branch의 가장 최근 commit을 가리키는 object id가 기록되어있다.

 

git 에서 branch는 refs 아래의 파일을 의미한다.

git branch

git branch 명령어

= refs/heads/ 디렉토리 안에 있는 파일명 출력

= refs/heads/ 디렉토리아래의 파일들은 각 branch를 나타냄

refs/heads

▶각 파일은 해당 branch의 가장 마지막 commit의 object id를 기록하고 있다.

 

git checkout exp 했을 때, HEAD 파일의 변화

ref: refs/heads/exp

exp 브랜치로 checkout 하면서 현재 checkout된 branch 파일을 가리키도록 변경되었다. (refs/heads/exp)
(해당 파일은 exp branch의 가장 최근 commit의 object id 값을 가리키고 있다.)

 

= 이를 통해,

1. git은 HEAD 파일을 통해 현재 checkout 되어있는 branch의 가장 최신 commit을 확인할 수 있고,

2. branch 목록은 refs/heads/ 디렉토리의 파일 목록을 통해,

3. 각 branch의 commit 정보refs/heads/{branch name} 파일로 관리한다는 점을 추측할 수 있다.

 


branch 충돌 해결

exp branch에서 파일을 생성한뒤 master와 merge 하면 문제없이 master에도 exp에서 생성한 파일이 추가된다.

 

그러나 merge 했을 때, 각 branch가 같은 파일 이름을 가진 파일을 수정했을 경우에는 주의해야한다.

 

😮 각 branch가 다른 부분을 수정한 경우

exp branch의 common.txt 와 master branch의 common.txt 파일의 내용이 다를 때  merge 하면

master와 exp가 각각 수정한 부분을 자동으로 전부 합친다.

 

🤪 각 branch가 같은 부분을 수정한 경우

병합하려는 branch들이 한 파일의 같은 부분을 수정한 경우, 문제가 일어난다...!

 

both modified :

- 병합하려는 부분이 master 와 exp에서 모두 수정되었기 때문에 conflit 발생

▶ git이 자동으로 merge 하는 것을 실패했기 때문에, 사용자가 직접 충돌을 해결해야한다.

vim common.txt

<<<< HEAD : 현재 checkout 되어있는 branch의 수정사항

>>>> exp : 현재 병합하려고 하는 branch의 수정사항

 

- git이 충돌부분에 대해 메모?해둔 것을 보고 파일을 수정한 다음에 commit 하여 merge를 수행하면 된다.

 

 

 

 

 

문제가 있을 시, 댓글로 알려주시길 바랍니다.

 

참고 : 지옥에서 온 git 강의 (이고잉 님)