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 |