Appia의 IT세상

[깃, Git] Git Merge Conflict(머지 충돌) 해결하는 방법 본문

IT_OS_ETC../[OS]Windows10&11

[깃, Git] Git Merge Conflict(머지 충돌) 해결하는 방법

Appia 2023. 11. 24. 07:47
반응형

[깃, Git] Git Merge Conflict(머지 충돌) 해결하는 방법

[깃, Git] Git Merge Conflict(머지 충돌) 해결하는 방법

 

이전 포스팅에서, Git Merge commit이 생성되는 경우에 대해서 살펴봤습니다. 물론, 모든 merge의 경우 아무런 문제가 없다면 매우 이상적인 상황일 것입니다. 하지만, 실제로는 Merge시에 생각치 않은 이슈에 직면하게 됩니다. 그중 가장 큰 것이 바로 Merge conflict(머지 충돌)라는 부분입니다. 오늘 포스팅에서는 이 Merge conflict(머지 충돌)이 발생할 경우에 해결하는 방법에 대해서 살펴보겠습니다. 

 

[깃, Git] Git Merge commit 생성되는 경우

 

[깃, Git] Git Merge commit 생성되는 경우

[깃, Git] Git Merge commit 생성되는 경우 이전 포스팅에서 우리는 Git Merge에 대해서 이야기를 했습니다. 여기에서, Fast-Forward Merge를 기반으로 Merge에 대해서 이야기를 했었습니다. 물론, 앞선 포스팅에

appia.tistory.com

 

일단, Merge conflict(머지 충돌)에 대해서 간단히 이야기를 해보도록 하겠습니다. 이 부분은 쉽게 이야기 하면, Merge시에 동일한 한개의 파일에 대해서 각 브랜치에서 수정한 내용이 상이할 경우에 발생합니다. 예를 들면, 저희는 Merge할 A와 B라는 각 브랜치에서 동일한 한개의 파일에 대해서 각 수정한 내용이 다를 경우에 발생합니다. 이 부분은 해당 파일을 수정해서 다시 한번 git add / git commit을 진행해야합니다. 

 

간단히 Merge conflict(머지 충돌)를 해결하는 방법은 다음과 같습니다. 

  1. merge시 충돌한 파일 열기
  2.  Merge conflict(머지 충돌)  부분 수정하기
  3. 제거 하기 " conflict markers"
  4. 그리고 변화를 add 하고 commit 만들기

 

그럼 간단한 예시를 함께 살펴보도록 하겠습니다. 이 예시에서는 일부로,  Merge conflict(머지 충돌)이 발생하게 하고 이 부분을 수정하도록 하겠습니다. 

 

일단, 별도의 폴더를 만들어서 하나 만들고, 해당 폴더에 git init을 통해서 repository를 초기화 하도록 하겠습니다. 

$ mkdir mergeT
$ cd mergeT
$ git init
# 파일 생성 후 commit
$ touch main.txt
$ git add main.txt
$ git commit -m "add main file"

위의 명령어를 토대로, 다음과 같이 repository를 하나 생성하고, 하나의 commit을 생성하였습니다. 

예제 commit 생성1

위의 명령어를 토대로, 추가 commit을 하나 더 생성합니다. 

# 파일 생성 후 commit
$ touch sub.txt
$ git add sub.txt
$ git commit -m "add sub file"

예제. 추가 commit 생성

저희는 이제 2개의 브랜치를 만들어보겠습니다. 앞선 포스팅에서 나왔던, git switch -c 명령어를 사용해보도록 하겠습니다. 

# 브랜치 생성
$ git switch -c sub

위의 명령어를 토대로, 브랜치가 생성 되었고 바로 전환되었음을 알 수 있습니다. 

sub 브랜치 생성

추가로 t_sub라는 브랜치 또한 생성을 해보겠습니다. 

$ git switch -c t_sub

t_sub 브랜치 생성

 

먼저, 앞선 과정에서 생성한 main.txt에 내용을 추가해보도록 하겠습니다. 이 내용은 t_sub 브랜치에 국한됩니다. 

t_sub의 main.txt 파일 수정

그런 후에 해당 파일에 대해서 git add와 git commit을 진행해보도록 하겠습니다. 

$ git add main.txt
$ git commit -m "modified main.txt"

위의 명령어를 토대로, commit을 진행하였습니다. 

main.txt 수정 후 commit (t_sub 브랜치)

 

저희는 그런 후에 앞서서 생성한 sub 브랜치로 이동하도록 하겠습니다. 

$ git switch sub

 

sub브랜치로 이동

 

그리고 나서,  Merge conflict(머지 충돌)를 만들기 위해서, main.txt를 변경하도록 하겠습니다. 물론, 이전에 t_sub 브랜치에서 수정한 내용과 상이하게 만들겠습니다. 

sub 브랜치의 Merge conflict(머지 충돌)발생을 위한 main.txt 수정

그리고 나서, 해당 부분에 대해서 git add / git commit을 통해서 commit을 진행하도록 합니다. 

$ git add main.txt
$ git commit -m "t test"

위의 명령어릍 토대로 실행하면 다음과 같은 화면이 나타날 것입니다. 

Merge conflict(머지 충돌)을 위한 파일 수정에 대한 commit 진행건

그리고 나서, 저희는 sub 브랜치의 현재 기준으로 하나의 브랜치를 추가로 생성합니다. 물론, 현재 sub 기준으로 바로 merge를 진행해도 되나, 혹 모를 상황을 대비하여, merge_b라는 브랜치를 하나 만들어서 merge를 진행할 예정입니다. 

$ git switch -c merge_B

위의 명령어를 통해서 브랜치를 하나 생성하여, 바로 전환하도록 하겠습니다. 

 

추가 브랜치 생성

 

그리고 나서, merge_B에서 git merge 명령어를 통해서 t_sub브랜치와 merge를 시도해보겠습니다. 역시 현재, 해당 부분에 대해서 merge를 진행하니 정상적으로 merge가 안되는 것을 볼 수 있습니다. 다음과 같은 화면에서, "CONFLICT"가 발생한것을 알 수 있습니다. 

Merge conflict(머지 충돌) 발생화면

 

그러면 현재 문제가 되는 부분을 열어보도록 하겠습니다. main.txt 부분을 열어보면 다음과 같은 화면이 나타나는 것을 알 수 있습니다. 

Merge conflict(머지 충돌) 발생후 해당 파일

위의 내용을 보면, 약간 이상한 내용이 보입니다. 즉, 이 부분을 conflict Markers라고 하는데, 즉 conflict가 발생한 파일에 대해서 해당 부분에 대해서 표시를 해줍니다. 

<<<<<<<< HEAD
내용.... (HEAD 브랜치 내용)

=======
내용....(Merge할 브랜치 내용)
>>>>>>> Merge할 브랜치 이름

 

일단, 해당 부분에서 conflict marker를 삭제하고, 해당 파일을 수정하도록 하겠습니가. 그런 후에 저장을 해줍니다. 

Merge conflict(머지 충돌)로 발생한 conflict marker 삭제 및 파일 수정 후의 main.txt

 

그리고 나서, 해당 파일에 대해서 git add를 진행하고, git commit을 진행하도록 합니다. 그런 후에 git log을 보면, 다음과 같이 정상적으로 merge가 된것을 알 수 있습니다. 

Merge conflict(머지 충돌) 해결 후, commit 상태 확인

이 부분을 gitkraken으로 확인해보면, 다음과 같은 화면이 나타납니다. 

Merge conflict(머지 충돌) 해결 후, commit 상태 확인 - gitkraken

이와 같은 방법으로 Merge conflict(머지 충돌)에 대해서 해결하는 방법에 대해서 살펴봤습니다. 

 

[깃, Git] git branch(깃 브랜치)보기, 생성, 전환하기

 

[깃, Git] git branch(깃 브랜치)보기, 생성, 전환하기

[깃, Git] git branch(깃 브랜치)보기, 생성, 전환하기 이전 포스팅에서는 git branch(깃 브랜치) HEAD(헤드)의 개념에 대해서 살펴봤습니다. 이전 포스팅에서는 실습 및 방법에 대해서는 전혀 언급하지 않

appia.tistory.com

 

이번 포스팅에서는 [깃, Git] Git Merge Conflict(머지 충돌) 해결하는 방법라는 주제로 포스팅을 해봤습니다. 실제, 이 부분에 대해서 흔히 접할 수 있습니다. 이와 같은 부분에 대해서 해결하는 방법에 대해서 다양하게 연습을 해보는 것을 권장드립니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments