본문 바로가기

programmer/Git 사용법

쉬운 Git 사용법 - 5 (Merge와 충돌)

합병과 충돌



21.



저번 글에서 branch1까지 만들었습니다. 그러면 branch에서 버그 수정이라든지 새로운 기능을 추가한 것이 잘 이루어져서 이 코드를 원래의 master 코드와 합치려고 합니다. 그러면 어떻게 하면 될까요? 이 때 merge(합병) 기능을 사용해서 코드를 합칠 수 있습니다.

.




enter image description here



master이라는 브랜치에 branch1이라는 브랜치를 합칠 것이기 때문에 master에 체크가 옮겨져 있어야 합니다.
그리고 branch1에서 마우스 오른쪽 클릭을 하면 나오는 메뉴에서 ‘Merge branch1 into current branch’라는 메뉴를 누릅니다. 현재 브랜치(master)에 branch1을 병합한다는 내용입니다.



enter image description here



Merge가 이루어 졌습니다. 그래프가 하나로 합쳐진 것이 보입니다. 또한 commit message도 자동으로 생성되었습니다.



22.



그러면 master 코드가 어떻게 바뀌었는지 살펴봅시다.



enter image description here



body의 내용이 바뀐 것을 확인할 수 있습니다. 기존 body 태그의 코드는



<h1>master</h1>
<h1>Git의 쉬운 사용법</h1>


입니다. 그런데 branch1에 있던 코드가 추가되면서



<h1>master</h1>
<h1>Git의 쉬운 사용법</h1>
<li>branch</li>


이렇게 바뀌었습니다. 두 코드가 합쳐진 것 입니다.



enter image description here



코드가 바뀐 것은 SourceTree 창의 오른쪽 아래에서도 확인할 수 있습니다. 초록색 바탕으로 되어있는 것이 추가되었다는 뜻이죠.



23.



이제 충돌에 대해 알아보겠습니다.

충돌은 병합을 할 때 일어납니다. 충돌에 대해 살펴보기 위해 다시 새로운 브랜치를 만들어보겠습니다. 저번 글에서 만든 것처럼 만들면 됩니다. branch를 누르고 이름을 입력하면 됩니다.
저는 branch2라는 브랜치를 만들었습니다.



이번에도 코드를 수정해 볼텐데요. 먼저 branch2의 코드를 수정해보겠습니다.



enter image description here



기존의 li 태그 밑에 새로운 li 태그를 추가하고 내용을 branch2라고 적어보았습니다.



enter image description here



그리고 commit도 했습니다. 다음은 master 브랜치의 코드를 수정해보겠습니다.



enter image description here



위와 똑같이 li 태그 밑에 새로운 li 태그를 추가하고 내용을 master라고 적었습니다.



enter image description here



commit도 진행하였습니다. graph를 보시면 새로운 브랜치인 branch2가 갈라져 있는 것을 확인할 수 있습니다.

그러면 방금 했던 것처럼 병합을 해보겠습니다. master에 체크가 가있는 상태에서 branch2를 마우스 오른쪽 클릭을 하면 메뉴가 나타납니다. ‘Merge branch2 into current branch’를 누릅니다.



enter image description here



그럼 위와 같은 오류를 만날 수 있습니다. 계속 진행하기 전에 해결해야하는 ‘merge conflicts‘가 있다고 합니다. 바로 충돌입니다. 왜 충돌이 일어났을까요? 기존에 합병을 할 때는 바꿔야하는 코드의 위치가 서로 달랐습니다. 그러니까 합병하는 것에 문제가 없었죠.

하지만 이번에는 똑같은 li 태그 밑에 새로운 li 태그를 추가해서 서로 다른 내용을 입력했습니다. 같은 위치에 서로 다른 내용이 들어가있기 때문에 Git의 입장에서는 어떻게 합쳐야 할지 알 수가 없는 것 입니다. 그래서 충돌이 발생했다고 우리에게 알리고 직접 해결하라고 합니다.



24.



그러면 이제 충돌을 해결해보도록 하겠습니다.



enter image description here



오류 메세지를 close하면 위와 같은 화면을 만날 수 있습니다. index.html 파일의 일부가 수정되었죠? 이것은 Git에서 어느 부분에서 충돌이 일어났는지 우리에게 알려주는 것입니다. 이 곳에서 충돌이 일어났으니 우리는 그 위치로 가서 적절하게 해결을 하면 됩니다.



enter image description here



기존의 li 태그 밑에서 충돌이 일어난 것을 확인할 수 있습니다. 또한, 충돌이 어떤 코드에서 일어났는지도 알려주고 있습니다. 저는 코드를 다음과 같이 바꿔보겠습니다.



enter image description here



이제 저희가 충돌을 해결했습니다. 그러면 SourceTree 창으로 돌아갑시다.



enter image description here



위의 그림과 같이 index.html을 오른쪽 클릭하고 Resolve conflicts를 누릅니다. 다시 나타나는 메뉴에서 mark resolved를 누릅니다.



enter image description here



그러면 위와 같이 경고 마크가 사라지면서 정상적으로 합병이 되고 commit을 진행할 수 있는 상태가 됩니다.



enter image description here



위의 그림은 commit을 모두 완료했을 때의 화면입니다.



25.



이번 글에서는 Merge와 충돌을 알아보고 충돌을 해결하는 방법도 함께 알아보았습니다.
다음 글에서 다른 내용으로 또 만나겠습니다!