본문 바로가기

공부

Git CLI - 기초02

branch는 직역하면 "나뭇가지" 란 의미다. 그렇다면 Git에서 branch는 무엇을 의미할까?

 

Git 에서의 branch 란?

 - 같은 버전에서 나왔지만 나누어져서 수정되어가는 버전들을 말한다.

 

*C1, C2와 D1, D2는 Base라는 같은 뿌리를 두고 있지만 B2이후로 나뉘어 각각 수정되고 있다.

 

 

 

branch의 문제점

 - conflict(충돌) 문제가 발생할 수 있다.

 - 나누어져서 수정된 버전들은 이후 merge(병합)될 수 있는데 이 때 경우에 따라 conflict가 발생한다.

 

나누어져서 관리되던 C2, D2가 E 로 merge 되었다.

 

 

Conflict 경우 병합과정 경우의 수

(1) 서로 다른 2개의 파일 병합

 - 2개의 branch에 각각 file A와 file B가 있을 때 자동으로 2개의 file을 합쳐서 merge 한다. 

 

(2) 같은 파일 다른 부분 수정, 병합

 - 2개의 branch에서 같은 이름의 file A를 서로 다른 부분을 수정했을 때 git이 알아서 합쳐서 수정된 file을 생성한다.

 

(3) *같은 파일 같은 부분 수정, 병합*

 - 2개의 branch에서 같은 이름의 file A을 같은 부분을 수정했다면 "Conflict"가 발생한다!

 

 

 

버전관리의 목적 : 파일을 더럽히지 않고 사용

branch > 디렉터리 이름을 더럽히지 않고 관리

 

 

 

명령어

(1) git branch : 브랜치 리스트를 보여준다.

(2) git branch 브랜치명 : 브랜치를 생성한다.

(3) git checkout 브랜치명 : 해당 브랜치를 전환한다.

(4) git log --all --graph --oneline : 로그를 그래프의 형식으로 간결하게 보여준다.

(5) git merge 브랜치명 : 현재 위치한 branch 와 지정한 브랜치를 병합하여 commit 한다.

 

 

용어정리

merge : 병합, 합치기, 서로 다른 branch의 file을 합쳐준다.

base : 어떤 2개의 file을 merge 할 때 2개의 file의 공통된 조상 file을 base라고 한다.

merge commit : 2개의 file을 합쳐서 merge 할 때 merge commit 이라고 한다.

 

 

 

3-Way merge

전제 : 3개의 file을 merge 할 때 1개의 file이 나머지 2개의 file의 base가 되는 file 일 경우

 

3-Way merge는 왜 필요한가?

 - 아래의 경우를 보자, 각각의 branch에 branch 1, branch 2 라는 이름의 파일이 있다고 가정한다.

   branch 1과 2는 base로 부터 어떤 방식으로 수정되었는지 알 수 없다.

   그러므로 같은 행인 1행, A 부분을 제외하고는 모두 Conflict가 발생하게 된다.

2-way merge

 

 

 - 아래와 같은 3-way merge 경우 branch 1, branch 2는 모두 Base의 하위 버전이다.

 즉, Base로 부터 어떤 부분이 수정된지 파악할 수 있다. 한번 각각의 행을 살펴보자.

 

(1행) Base의 A로부터 수정된 부분이 없다. > merge

(2행) Base의 B로부터 branch 1에서 ED로 수정되었고 branch 2는 수정되지 않았다 > merge

(3행) Base의 C로부터 branch 2에서 MO로 수정되었고 branch 2는 수정되지 않았다 > merge

(4행) Base의 D로부터 branch 1과 branch 2 모두 각각 IT와 DI로 수정되어 무엇을 선택할지 알 수 없다 > Conflict

 

결론적으로 2-way merge에 비해 3-way merge는 conflict의 발생이 줄어듬을 알 수 있다.

'공부' 카테고리의 다른 글

[IaC] IaC 이란 무엇인가?  (0) 2024.11.13
Git CLI - 기초01  (0) 2022.03.06
Git 이란 무엇인가?  (0) 2022.03.06