기술 이모저모/[Github] Workshop

[Github] CONFLICT 발생!! 어떻게 해야할까?

Kobby 2022. 7. 31. 22:56

어느 평화롭게 Terraform 코드를 고치고 있던 어느날 Github에 PUSH를 하기 위해 Merge를 하니 CONFLICT 에러가 발생했다!!

CONFLICT 에러

처음에는 아주 당황해서.. 옆 부서 인원에게 도움을 받았다.. 도움을 받고 그 이후에 왜 이런 문제가 발생했는지/대처할 수 있는 방법에 대해서는 어떤게 있을지에 대해 공부한 내역을 간략하게 정리한다.

 

그렇다면 CONFLICT 에러는 무엇일까?

간단하게 말하면, 서로 다른 User or Branch에서 같은 파일을 수정할 때 발생하는 오류이다.

CONFLICT 에러 발생 사유

위 그림의 예시를 들어보겠다.

1. John과 Bob은 동일함 Version 1.0에 대함 Branch를 만들어서 코드를 개발한다.

2. 하지만 우연히 John, Bob 모두 동일한 service.html를 수정한다.

3. Version 2.0으로 John, Bob이 수정한 코드를 Merge한다.

4. Github CONFLICT 에러가 발생한다!!

 

에러가 발생하는 가장 큰 이유는 John, Bob의 코드를 Merge해야 하는데, Master 입장에서는 누구의 코드를 합칠 수 알 수 없기 때문에 발생한다.

 

CONFLICT 에러가 유발하는 부분을 확인하려면 어떻게 해야 할까?

크게 4가지 방법이 있다.

1. git status : 현재 git의 상태를 알려준다,.

 

git status

2. git log : Commit 된 전체 내역을 볼 수 있다.

git log

3. git log --oneline --left-right --merge : CONFLICT가 발생한 파일의 Commit을 보여 준다.

git log detail

4. git log --oneline --left-right -p : CONFLICT를 유발하고 있는 파일을 보여준다.

git log detail2

 

위 1, 2, 3, 4를 종합해보면 Author 사용자가 Date에 Commit(60056a9) 한 수정으로 인해 CONFLICT가 발생하였으며, main.tf가 문제가 됨을 알려준다.

 

CONFLICT 에러가 발생하면 어떻게 될까?

일단 Merger가 되지 않는다. 그리고 CONFLICT 에러가 발생한 코드를 보면 아래와 같이 알 수 없는 >>>>, <<<< 문자열이 추가 된다.

CONFLICT 에러 발생 코드

현재 Master Branch(<<<<HEAD)에서 test Branch(>>>>test) 코드를 Merge할 때 발생했음을 보여주며, ====== 하단의 코드가 문제가 됬음을 알려준다.

 

CONFLICT 에러 발생을 복구하려면 어떻게 해야할까?

1. Master에서 수정한다.

Master에서 파일을 열어보면 직접 수정하고 add -> commit -> merge -> push하는 방안이 있다.

 

2. 일단 merge를 취소한 다음(git merge —abort)에 개별 Branch에서 다시 수정을 한다. 그리고 add -> commit -> merge -> push를 한다.

 

 

물론 위 1, 2 방법이 좋은 방법은 아니다. 하지만 당장의 문제는 회피할 수 있다.. 물론 이 방법 외 더 좋은 방법은 많고 그 방법에 대해서는 차차근 하나씩 알아보는 시간을 차후에 가질 예정이다ㅎㅎ

 

나는 다른 사람의 Merge할 일이 없기 때문에 절차만 잘 지켰다면 CONFLICT 에러가 발생하지 않아야 한다.. 근데 테스트 한다고 여러개의 Branch를 만들고, 개별 Branch에서 수정하고 Commit을 하면서 CONFLICT가 발생했을것이라고 생각된다. ㅜㅜ