Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

3-way merge 본문

Git

3-way merge

야식은진리다 2020. 4. 27. 00:34

예시

기반 커밋 커밋1 커밋2 머지 커밋
A A    
B B B B
C Ca Cb 충돌 발생
D   D  

위 표는 커밋1과 커밋2를 병합하려고 하는데, 두 커밋의 공통된 기반 커밋을 참고하여 어떤 것을 머지 커밋에 채택할지 결정하고 있다. 이런 방식을 3-way merge라고 부른다.

 

위 표를 보면 기반 커밋이 A파일을 가지고 있고, 커밋1 또한 A파일을 가지고 있는데 커밋2는 A파일을 가지고 있지 않다.

이 말은 즉슨 커밋1에서는 A파일에 대한 수정이 일어나지 않았지만 커밋2에서는 A파일을 삭제했다는 뜻이 되므로 두 커밋을 병합할 때 우선시해야 할 수정사항은 A파일의 삭제가 된다.

 

두 번째로 기반 커밋과 커밋1, 커밋2 모두 B파일을 가지고 있고 이는 아무런 변화도 일어나지 않음을 뜻하므로 병합할 때 또한 B파일은 그대로 유지되게 된다.

 

세 번째로 기반 커밋이 C파일을 가지고 있고, 커밋1은 C파일을 수정한 Ca파일을, 커밋2는 C파일을 수정한 Cb파일을 가지고 있다. 이 경우 커밋1과 커밋2 둘 다 변경이 일어났으므로 Git은 어떤 수정사항을 적용할지 알 수 없으므로 충돌이 발생하고 어떤 수정을 적용할지 개발자에게 맡기게 된다.

 

네 번째 경우엔 첫 번째 경우와 같이 기반 커밋이 가지고 있던 D파일을 커밋2는 그대로 가지고 있지만 커밋1은 삭제가 이루어졌으므로 병합할 때 D파일을 삭제하게 된다.

 

 

결론

위 경우들에게서 얻을 수 있는 결론은 Git이 3-way merge를 진행할 때 기반 커밋에서 수정된 커밋을 우선시하고, 만약 두 커밋 모두에게서 수정이 일어났다면 충돌이 발생하고 개발자가 대신 처리해주어야 한다는 것이다.

'Git' 카테고리의 다른 글

Git 브랜치 관리  (0) 2020.04.30
Git 충돌(conflict) / vscode를 병합(merge)도구로 사용하기  (0) 2020.04.29
Git Merge(병합)  (0) 2020.04.26
Git 브랜치  (0) 2020.04.26
Git Alias(사용자 지정 명령)  (0) 2020.04.26