깃 GUI 툴인 소스트리를 이용하여 브랜치를 병합하고 병합 과정에서 발생하는 충돌을 해결하는 방법에 대해 알아보겠습니다.
1. 브랜치 병합하기
병합(merge): 하나의 브랜치를 현재 브랜치(헤드 브랜치)와 합치는 것.
예를 들어, 헤드 브랜치가 main이고 여기서 version2 브랜치를 병합하면 version2의 내용이 main에 반영됩니다.
깃에서는 merge 명령어(merge '병합할 브랜치 이름')를 사용합니다.
소스트리에서는 병합할 브랜치를 우클릭하여 병합을 선택해주면 됩니다.
병합을 할 때는 충돌이 발생할 수 있는데 충돌이 발생할 경우 다음과 같은 에러 메세지가 뜹니다.
만약 머지 이전으로 돌아가고 싶다면 돌아갈 위치에서 마우스 우클릭하여 '이 커밋까지 현재 브랜치를 초기화'를 선택해 줍니다.
병합 시에 자주 발생하는 상황을 알아보겠습니다.
① 헤드 브랜치에 변경 사항이 없는 경우
- 합치려는 브랜치가 헤드 브랜치로부터 시작되었다.
- 그 사이 헤드 브랜치에는 전혀 갱신이 없었다.
주로 혼자 작업을 할 때 발생하는 상황이며 단순히 브랜치의 참조만 갱신되는 상황입니다. 이런 상황을 fast-forward라고 합니다.
위 그림은 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋한 상태입니다.
여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동합니다.
② 헤드 브랜치에서 가지가 생겨난 경우
- 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
- 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
- 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우
이 경우에도 기본이 되는 헤드 브랜치에서 타겟 브랜치를 병합하면 되긴 하는데, 이 때 여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있습니다. 충돌은 소스트리와 에디터를 사용하여 해결 가능한 에러이므로 겁먹지 않아도 됩니다.
위 그림과 같은 상황에서 충돌이 생기지 않거나 충돌을 잘 해결했다면 아래 그림과 같은 모양이 됩니다.
만약 병합 시에 충돌이 발생하면 다음과 같은 에러 메세지가 뜹니다.
2. 충돌 해결하기
그렇다면 병합 과정에서 충돌이 발생하는 원인은 무엇이며, 발생한 충돌은 어떻게 해결할 수 있을까요?
[충돌 원인]
- 자동병합을 실패했을 경우 발생
- 주로 두 커밋이 같은 파일을 편집했을 경우 발생
[충돌 해결]
① 에디터에서 수동으로 해결하기
에디터에서 수정 → add → 커밋
충돌 발생 후 에디터를 열어 확인해보면 병합하려고 했던 부분이 다음과 같이 표시됩니다.
여기에서 원래 원래 코드 내용이 아닌 충돌로 인해 쓰여진 부분들을 직접 지운 후 커밋을 해줍니다.
이 때 커밋 메세지는 자동으로 작성되어 있어 따로 작성하지 않아도 됩니다.
② 소스트리를 이용한 해결
충돌이 일어난 파일 우클릭 → 충돌 해결 → '내것(HEAD)'/'저장소의 것'을 사용하여 해결
'Git' 카테고리의 다른 글
[Git] 깃 기본 용어 / 주요 명령어 정리 (1) | 2022.09.19 |
---|---|
[GitHub&소스트리] 4. 변경 사항 취소하기 & Branch (0) | 2022.07.14 |
[GitHub] 3. 커밋(commit) 메시지 작성법 및 주의사항 (0) | 2022.07.14 |
[GitHub] 2. 토큰 생성 (0) | 2022.07.13 |
[GitHub] 1. Git & GitHUb 개념, 소스트리 (0) | 2022.07.13 |