Information Security Study

240108 CLI에서 브랜치 병합, 충돌 문제 해결 본문

네트워크 캠퍼스/Git, GitHub

240108 CLI에서 브랜치 병합, 충돌 문제 해결

gayeon_ 2024. 1. 11. 16:21

CLI에서 브랜치 병합하기

브랜치 병합

: 특정 브랜치의 변경내역을 다른 브랜치로 가져오는 것

이 과정에서 두 브랜치의 코드가 하나로 합쳐지기 때문에 병합이라는 표현을 쓴다.

 

 

구체적인 논리 구조이다.

브랜치 병합 직전 메모리 구조이다.

 

 

 

 

이제 브랜치를 병합할 것이다.

 

병합 순서

1. feature;a

2. master

 

기본적으로는 master보다는 feature;a에 먼저 merge를 하고

문제가 없다는 것이 확인되면 master에도 마저 feature;a의 내역을 merge한다.

 

그 이유는 master 브랜치는 무조건 돌아가는 코드만 커밋해야 하기 때문이다.

feature;a 브랜치를 체크아웃하고 

다음으로

브랜치 병합(merge) git merge 타겟브랜치명

위의 명령어로 병합하면 된다.

 

 

 

merge 시 이런 창이 나온다면

esc를 누른 다음 :q! 를 입력하면 된다.

 

 

엔터를 누르면 빠져나오게 된다.

 

 

 

이렇게 하면 feature;a에 마스터에 추가된 내용을 병합할 수 있다.

 

 

 

이제 브랜치의 논리적 구조는 아래와 같이 변한다.

 

3번 커밋까지는 스냅샷에 기록되어있으므로 두 브랜치가 같은 내용이라는게 확실하기 때문에

4, 5, 6번 커밋 모두에 3번까지의 기능은 동등하게 들어가 있다.

 

4번 커밋에서 추가한 a.txt 세팅 이외에도

5번 커밋에서 추가한 2번 기능 추가가 합쳐져야 하는 상황이다.

 

6번 커밋에서 실제로 feature;a 쪽에 2번 기능을 병합해서 4번과 5번의 합집합을 만들었다.

 

 

feature;a 체크아웃 상태로 gittest.txt에 2번기능이 추가되었는지도 확인하면 된다.

 

 

 

하지만 아직 master 브랜치는 5번 커밋에 머물러 있기 때문에 a.txt에 대한 정보가 없다.

 

 

 

master 브랜치를 체크아웃하고 마저 feature;a와 병합한다.

이제 이렇게 해서 양쪽 브랜치가 모두 동등해지면 하나의 기능개발이 끝난 것이다.

 

 

 

 

6번커밋에 master와 feature;a가 동시에 머무르는 상황이 된다.


충돌 문제 해결하기 - sourcetree

병합시 문제가 절대 발생하지 않는다면 부담이 없겠지만

같은 파일에 대해 각 브랜치에서

새 브랜치를 생성한 이후 새롭게 같은 파일을 수정하고 병합하는 경우 충돌이 발생한다.

충돌 해결도 소스트리와 cli에서 약간 다르다.

 

충돌 시나리오를 먼저 만들어보겠습니다.

윗 문단까지 수행되었다는 가정하에 master 브랜치를 체크아웃한다.

 

 

gittest.txt의 3번 라인에 master 3번기능 추가 후

add, commit을 진행한다.

 

 

 

그리고 feature;a 브랜치를 체크아웃하고

gittest.txt의 3번 라인에 a 3번기능 추가 후

add, commit을 진행한다.

 

 

 

현재 논리적 구조는 위와 같다.

 

 

위에서 6번까지의 기능은 모두 동일하므로 하나로 합칠때 그대로 두면 되지만

이후 두 브랜치 모두가 같은 지점인 gittest.txt의 3번라인에 서로 다른 코드를 작성했다.

 

이제 병합하려고 하면 3번라인에 master의 코드를 두는게 옳을지, feature;a의 코드를 두는게 옳을지

모호한 상황이 발생하기 때문에 충돌이 발생한다.

 

 

먼저 소스트리에서는 충돌 발생시 아래와 같은 오류가 발생한다.

 

 

 

이 경우 충돌난 파일을 sourcetree에서 더블클릭해 열고

 

 

 

 

=========== 로 구분된 영역에서

<구분된 병합코드 보기>

위쪽 코드와 아래쪽 코드를 적절하게 반영하고 다시 병합하면 충돌이 해결되어

 

 

기존에 출력됐던 충돌 발생 메시지이다. 

지우고 '충돌 해결 및 병합 재시도'와 같은 메시지 작성 후 커밋하면 된다.

 

 

충돌 문제 해결과 병합이 잘 된 모습이다.

 

 

 

충돌 문제 해결하기 - CLI

 

소스트리에서 실습했던 것과 동일하게 gittest.txt를 수정해준다.

 

 

git merge 브랜치명

명령을 수행할 때 경고가 위와 같이 나온다.

 

 

 

 

소스트리와 같은 방식으로 충돌난 파일을 열고 수정한다.

 

 

 

이제 머지를 다시 해보면 먼저 커밋하라고 위와 같이 나온다.

 

 

 

add 후 커밋을 진행해주면

 

 

 

 

충돌이 해결되어 이미 merge가 완료되었음을 확인할 수 있다.

'네트워크 캠퍼스 > Git, GitHub' 카테고리의 다른 글

240105 브랜치 병합  (0) 2024.01.11
240104 브랜치  (1) 2024.01.11
240103 Git CLI  (0) 2024.01.11