말 그대로 충돌 이다. 즉, 서로 다른 브랜치에서 같은 코드를 수정하고 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 Graph
extension,git log
등을 통해commit
내역 및branch
상황을 좀더 자세하게 알 수 있다.