728x90
반응형
안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️ 입니다.
오늘은 Git Merge의 2가지 방식에 대해 알아보도록 하겠습니다.
1. 개요
이전 회사에 있을 때에는 회사 내부 서버실이 있었고 주로 SVN을 사용하였다.
그렇기 때문에 Git 관련된 용어는 굉장히 낯설었고 이해하기 힘들었다.
이후 이직한 회사에서는 Git 을 주로 쓰고 있었고 그거에 대해 숙지할 필요성이 생기게 되었고!
공부를 하면서 알게된 정보를 블로그에 정리를 해보려고 한다.
2. Merge 란?
브랜치(Branch) 와 브랜치를 합치는 과정
엥 그러면 브랜치는 뭐에요..? 🧐
2-1. Branch 란?
동일한 소스코드에서 가져온 독립적인 개발 라인
그러므로 Merge 란 별도로 가지고 온 독립적인 개발 라인을 서로 합치는 과정이라고 보시면 됩니다!
Merge 과정에서 코드 충돌이 일어나는 이유?
병합하려는 브랜치가 동일한 코드를 수정하는 경우
반응형
3. Fast Forward 란?
- master 브랜치와 dev1 브랜치가 공통적으로 가지고 있는 commit 을 Base 라고 한다.
- 즉, 두 브랜치가 바라보는 HEAD Commit 이 동일하다.
- 두 브랜치가 각각 참조하는 commit은 동일한 선상에 위치하고 있는데, 이 상태를 Fast-Forward 상태라고 한다.
- 현재 상태에서 Merge(병합) 과정이 일어난다면 무슨일이 일어날까?
- master 브랜치의 참조 개체가 앞서있는 dev1 개체를 참조되도록 이동한다.
- 마치 브랜치가 점프하여 다른 브랜치에게 이동하는 모습을 본따서 Fast-Forward ( 빨리감기) 라고 불린다.
4. 3-way-merge 란?
- 두 브랜치 ( master, dev1 ) 모두 Base 에서 commit을 진행하여 분기해 나간 상태가 되었다.
- 이 상태에서 commit 을 진행하면 새로운 commit이 생성된다.
3-way-merge 라고 불리는 이유는,
각각의 commit을 가지고 있는 두 브랜치가 병합할 때, Base 와 각 브랜치 2개가 참조하는 commit을 기준으로 병합하기 때문이다.
728x90
4-1. 3-way-merge 의 원리
Base | main | dev1 |
A | A' | A |
B | B | B' |
C | C' | C'' |
- 병합을 진행하기 전 Base, main, dev1 의 상태를 위와 같이 표현할 수 있다.
Base | main | dev1 | 병합 |
A | A' | A | A' |
B | B | B' | B' |
C | C' | C'' | C? ( 충돌! ) |
- A 와 B의 경우 동시에 수정된 부분이 없기 때문에 그대로 문제없이 반영이 된다.
- 하지만 C의 경우 두 브랜치에서 동일하게 수정이 이루어져 코드 충돌이 발생하게 된다.
- 충돌이 발생하면 코드 히스토리를 확인하여 개발자가 직접 수정을 해주고 그 이후에 commit 을 진행해야 한다.
감사합니다.
참고
728x90
반응형
'기타 👨🏻💻 > Git' 카테고리의 다른 글
[Git] 체리픽 ( Cherry-Pick ) (0) | 2024.07.04 |
---|