● 병합이란?
하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge)라 한다.
현재 브랜치는 헤드(HEAD) 브랜치라고 하며, 예를 들어 헤드 브랜치가 master 이고
version2 브랜치를 병합하면 version2의 내용이 master에 반영된다.
병합시 자주 발생하는 상황에 대해 알아보자.
● 상황 1 : 헤드 브랜치에 변경 사항이 없을 경우
가장 쉬운 상황
이 상황은
- 합치려는 브랜치가 헤드 브랜치로부터 시작되었다.
- 그 사이 헤드 브랜치에는 전혀 갱신이 없었다.
주로 혼자 작업을 할 때 발생하는 상황이다.

위 그림은 헤드 브랜치(*이 붙어 있는)인 main에서 version2가 시작되고 두 번 커밋한 상태다.
여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동한다.

이런 상황을 fast-forward 라 하며, 단순히 브랜치의 참조만 갱신되는 상황이다.
실전 예시)

병합을 진행하게 되면

출돌이 발생하게 된다.
※ 느낌표 부분이 충돌이 발생한 부분이다.
※ 동시에 같은 파일을 수정했기 때문에 충돌 발생

코드를 확인해보면 HEAD가 현재 변경 사항 main 내용 version2의 내용은 추가해야할 내용이다.
병합은 수동으로 진행을 해야한다.

불필요한 내용 삭제 후 저장

커밋을 진행하며, 내용의 경우 특별히 수정하지 않았기 작성된 때문에 내용 그대로 유지.

정상적으로 병합된 것을 확인할 수 있다.

테스트 진행 시 새로 만든 파일인 version3.md 파일에 병합할 경우 에러가 발생하지 않고 정상적으로 병합된다.
● 상황 2 : 가지가 생겨난 경우
두 번째 경우는 상황이 조금 복잡해 졌으며, 원인은 몇 가지가 있다.
- 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
- 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
- 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우
세 경우 모두 종종 발생하는 상황이다.

이 경우 기본이 되는 헤드 브랜치에서 타겟 브랜치를 병합하면 되긴 하지만,
이 때 여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있다.
충돌이 생기면 에러 메시지가 발생하므로 당연한 일이기 때문에 걱정할 필요가 없디.
혼자 작업하는 경우에는 충돌 해결도 쉬운 편이다.
- 보통 가장 최신 내용 하나만 선택하면 되는 경우
- 최신 내용은 보통 타겟 브랜치에 있는 경우가 만핟..
- 여러 파일에 변경 사항이 혼재해 있는 경우도 내가 개발했으므로 크게 어렵지 않다.

소스트리와 에디터를 사용하면 어렵지 않게 충돌 해결이 가능하다.
운 좋게 충돌이 생기지 않았거나, 잘 해결했다면 위와 같은 모양이 된다.
'Git&GitHub' 카테고리의 다른 글
| Git&GitHub reset으로 커밋 되돌리기 (0) | 2024.06.03 |
|---|---|
| Git&GitHub 충돌 해결하기 (0) | 2024.06.02 |
| Git&GitHub 변경사항 취소하기 (1) | 2024.06.02 |
| Git&GitHub 소스트리 사용해보기 (0) | 2024.05.31 |
| github 토큰 생성 (0) | 2024.05.31 |