merge할 때 git conflict 해결 방법, 아주 간단해요

1. git conflict 발생 원인

이 글을 읽고 있다면 브랜치에 대한 개념은 이해를 하고 있을 것이라 가정을 하겠다.

일반적으로 프로젝트 팀원들은 서로 다른 브랜치에서 작업을 한다. 그리고 작업을 마치면 이 브랜치를 병합할 것이다. 그래야 하나의 완성된 코드가 되기 때문이다.

웬만한 경우는 git이 알아서 여러 브랜치의 코드들을 합쳐 준다. 그런데 만약 팀원들끼리 소통이 안 되서 동일한 파일, 동일한 라인에 서로 다른 코드를 넣었다고 해 보자. 그러면 git은 어떻게 코드를 합칠까?

이럴 때 git은 코드를 병합해주지 않는다. 대신 conflict라는 오류 메시지를 출력한다.

“너네 팀원들끼리 서로 다른 이야기 하고 있으니까(=서로 다른 두 코드가 충돌되니까) 말 맞춰와. 그러면 병합해줄게.”

라는 메시지다. 그러면]이러한 충돌 오류를 어떻게 해결하는 지 알아보자.

2. git conflict 해결 방법

conflict는 각 브랜치가 동일한 부분을 두고 서로 다른 코드가 나왔기 때문에 생기는 오류다. 그렇다면 해결 방법은 간단하다. 두 브랜치가 충돌난 부분을 동일하게 수정하면 된다. 자세한 방법은 사례를 통해 알아보자.

현재 master라는 브랜치와 cheolsu라는 브랜치 2개가 있다고 해보자. 저장소 내 파일은 ‘리얼테크’라는 이름의 메모장 파일만 하나 있다.

먼저 master 브랜치에서 다음과 같은 작업을 수행했다.

  1. ‘리얼테크’ 메모장 파일의 첫째 줄에 ‘리얼테크1’ 입력
  2. ‘컨트롤+s’로 저장
  3. git bash열고 <git add 리얼테크.txt>로 스테이징
  4. <git commit -m “리얼테크1″>로 커밋

이제 cheolsu 브랜치로 이동해서 다음과 같은 작업을 수행했다.

  1. ‘리얼테크’ 메모장 파일 열고 첫째 줄에 ‘리얼테크2’ 입력
  2. ‘컨트롤+s’로 저장
  3. git bash열고 <git add 리얼테크.txt>로 파일 스테이징
  4. <git commit -m “리얼테크2″>로 커밋

이제 아래 명령어를 입력해서 cheolsu 브랜치를 master 브랜치에 병합한다.

git checkout master 
git merge cheolsu

그러면 아래 사진과 같이 충돌이 발생한다. master 브랜치와 cheolsu 브랜치가 똑같은 ‘리얼테크’ 메모장의 첫 째줄에 서로 다른 메시지(‘리얼테크1’과 ‘리얼테크2’)를 입력하고 있기 때문이다.

git conflict 발생 이미지
git conflict 발생 이미지

이때는 먼저 충돌이 발생한 파일을 찾는다. 아래 사진처럼 git이 어떤 파일에서 충돌이 났는지 알려준다. 현재 ‘리얼테크.txt’라는 파일에서 충돌이 발생했음을 알 수 있다.

이제 그 파일에 들어가 본다. 이때 파일을 메모장이나 VScode와 같은 텍스트 에디터로 열어야 한다.1 텍스트 에디터로 여는 방법을 모른다면 주석을 참조하길 바란다.

그러면 아래와 같이 충돌이 발생한 부분을 표시하고 있다.

git conflict 발생 부분
git conflict 발생 부분

이 부분을 동일하게 수정해준다. 나는 이 텍스트들을 모두 지우고 ‘리얼테크 수정본’ 이라는 글자를 입력했다.

충돌한 부분 수정하여 git conflct 해결
충돌한 부분 수정하여 git conflct 해결

그리고 아래 명령어를 입력하여 해당 내용을 커밋한다. 일반적인 커밋 명령어와 동일하다.

git add 리얼테크.txt 
git commit -m "리얼테크 수정본"

이 과정을 완료하면 merge할 때 파일 충돌 현상을 없앨 수 있다. 정리하면 git conflict 해결 방법은 아래와 같다.

  1. 충돌이 발생한 파일 확인
  2. 텍스트 에디터로 충돌된 파일 열기
  3. 충돌된 부분 확인 후 수정
  4. 다시 커밋

이 글은 깃허브 공식 블로그의 병합 충돌 해결 방법에 관한 글을 참조했습니다.

  1. 해당 파일의 아이콘 우클릭 – 연결 프로그램 – 메모장 등 에디터 선택 ↩︎

이 게시물이 얼마나 유용했습니까?

별점을 매겨주세요.

평균 별점 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Leave a Comment