병합이란?
- 하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge)라고 한다.
- 현재 브랜치는 헤드(HEAD) 브랜치라고 한다.
- 예를 들어 헤드 브랜치가 main 이고 여기서 version2 브랜치를 병합하면 version2의 내용이 main에 반영되게 된다.
- 병합시 자주 발생하는 상황에 대해 알아보도록 하자.
상황1: 헤드 브랜치에 변경 사항이 없을 경우
가장 쉬운 상황
가장 행복한 상황이다. 이 상황은
- 합치려는 브랜치가 헤드 브랜치로부터 시작되었다.
- 그 사이 헤드 브랜치에는 전혀 갱신이 없었다.
주로 혼자 작업을 할 때 발생하는 상황이다.
- 위 그림은 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋(C1, C2)한 상태이다.
- 여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋(C4)으로 이동한다.
- 이런 상황을 fast-forward 라고 합니다.
- 단순히 브랜치의 참조만 갱신되는 상황이다.
상황2: 가지가 생겨난 경우
- 두 번째 경우는 상황이 조금 복잡해 졌다. 원인은 몇 가지가 있다.
- 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
- 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
- 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우
- 세 경우 모두 종종 발생하는 상황이다. 이 경우에도 기본이 되는 헤드 브랜치에서 타겟 브랜치를 병합하면 되긴 하는데, 이 때 여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있다.
- 충돌이 생기면 에러 메시지 같은게 나오기 때문에 초보는 큰 충격에 빠지는 데 당연한 일이므로 걱정할 필요가 없다.
- 혼자 작업하는 경우에는 충돌 해결도 쉬운 편이다.
- 보통 가장 최신 내용 하나만 선택하면 되는 경우가 많다.
- 그리고 최신 내용은 보통 타겟 브랜치에 있는 경우가 많다.
- 여러 파일에 변경 사항이 혼재해 있는 경우도 내가 개발했으므로 크게 어렵지 않다.
- 소스트리와 에디터를 사용하면 어렵지 않게 충돌 해결이 가능하므로 겁먹지 말자!
- 운 좋게 충돌이 생기지 않았거나, 잘 해결했다면 아래와 같은 모양이 된다.
- 아래 사이트에서 깃 브랜치 사용 연습해보자
https://learngitbranching.js.org/
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
소스트리로 병합(merge)하기
상황1: 헤드 브랜치에 변경 사항이 없을 경우
- Version3라는 브랜치 새로 생성
- version3 브랜치에 체크아웃 후 파일을 수정해준다.
- 수정된 내용을 저장 후 커밋까지 완료해준다.
- fast forward 성공
상황2: 가지가 생겨난 경우
- version2가 수정되었을 때, main(master) 브랜치에서 병합하기 버튼을 클릭해준다.
- 충돌이 발생하였다. 겁내지 말자.
- 에디터로 들어가보면 해당 오류 사항이 뜬다. 여기서 Accept Both Changes를 누르거나 수동으로 수정해준다.
- 수정된 내용을 저장 후 커밋해준다.
- 충돌 사항이 해결되었다!
- 깃헙에 푸쉬해준다.
## 병합해서 충돌이 안 나려면?
- 보통 다른 파일에서 작업을 하면 충돌이 안난다.
## 기본적으로 같은 파일을 수정하면 충돌이 일어난다.
'Git' 카테고리의 다른 글
[Git] reset으로 커밋 되돌리기(Sourcetree) (0) | 2023.03.13 |
---|---|
[Git] 충돌 해결하기 (0) | 2023.03.13 |
[Git] 브랜치의 개념 및 체크아웃 이용 방법 (0) | 2023.03.10 |
[Git] 깃 checkout을 소스 트리를 이용해 변경 내용 취소하기 (0) | 2023.03.10 |
[Git] 소스 트리 업로드하기(push) (0) | 2023.03.10 |