말 그대로 충돌 이다. 즉, 서로 다른 브랜치에서 같은 코드를 수정하고 merge를 했을때 자동 merge가 실패되는 현상이다.
✔ 구글에git merge라고만 쳐도, 이렇게 웃긴 짤들이 많다.(내 미래인가.. 크흠...)
위에서 본 짤과 같이, merge 관련 이슈는 빈번하게 일어난다고 한다. (아직 직접적으로 겪진 않았지만.. ) 만일 짧고 간단한 파일들의 conflict인 경우 금방 해결할 수 있지만, 코드가 수백줄, 수천줄이라면.. 생각만해도 아찔할 것이다. 그러나?!! 우리는 할 수 있다. 깃이 하라는 대로만 하면 되니까 ㅋㅋㅋㅋ... 때문에 프로젝트에 들어가기 전, 생활코딩 강의를 참고하여 간단한 conflict 복습 겸 연습을 해보았다.
위 이미지를 간단히 설명하면 다음과 같다.
master branch에서 함수 및 return 1 생성 (이때 함수는 기능을 하는 것이 아닌, 단순 예시를 위해 작성한 것이다.)
exp branch 생성 및 이동, return 1 => return exp 변경
다시 master branch로 이동 및 return 1 => return master로 변경
master branch에서 exp branch를 merge한 결과, conflict가 났다. 그 이유는 내가 작성한 test 함수 안의 return master에다가 exp branch 의 return exp를 합치려고 했기 때문이다. 즉 특정 코드의 추가 혹은 제거가 아니라 수정된 두 branch 중에 하나를 선택해야 하는 상황이기에 프로그램은 자동으로 merge를 하지 않고 사용자에게 conflict를 띄워 상황을 알려주는 것이다.
✔ 이처럼 양쪽에서 수정이 됐다고 경고창이 뜨게 된다. (물론conflict를git merge --abort를 통해 취소도 할 수 있다. )
conflict를 해결하는 방법은, 내용을 고치면 끝이다. (생각보다 어렵지 않다.) 물론 로직이 복잡해지고 코드 양이 많아지면 접근 경로가 어렵고 난감해지겠지만, 결론적으로는 수정만 하면 되기 때문이다.
✔
HEAD는 현재 위치한branch의 내용이고 아래는merge하고자 하는branch의 내용이며 아래와 같이 내용을 수정하였다.function test(){ // 같은 함수 return "master", "exp" // 수정 내용 }
✔ 파일 수정 후git add,git status를 통해 파일이 수정됐음을 알 수 있으며git commit을 한 후 ,파일 내용을 확인해보면 정상적으로merge가 됨을 알 수 있었다.
✔ VSC에서 지원하는Git Graphextension,git log등을 통해commit내역 및branch상황을 좀더 자세하게 알 수 있다.