주제 4

충돌 해결

conflict는 재난이 아니라, 겹치는 수정 중 어떤 최종 텍스트를 남길지 Git이 도움을 요청하는 상태입니다.

conflict의 의미

GitHub에 내 컴퓨터에 아직 없는 변경이 있으면 VS Code가 push를 멈추고 먼저 pull하라고 안내할 수 있습니다. Pull은 GitHub의 변경을 내 컴퓨터로 가져와 내가 작업한 내용과 합치는 과정입니다.

두 버전에서 같은 부분을 서로 다르게 수정해 Git이 자동으로 합치지 못하면 최종 내용을 직접 고르도록 요청하는데, 이것이 conflict입니다.

먼저 pull하라는 VS Code push 경고

Pull 전에 git status를 실행하세요. commit하지 않은 작업이 보이면 먼저 commit하거나 git stash로 잠시 보관합니다.

'Cancel’을 클릭하고 Pull을 진행하세요.

그러면 Stage가 취소되면서 아래와 같은 화면을 확인할 수 있습니다. 초록색 상자 안에는 Local에서 수정한 내용을 보여주고, 파란색 상자 안에는 GitHub의 내용을 보여줍니다.

conflict 중 staging이 취소된 VS Code Source Control 화면

세 가지 선택지

세 가지 선택지가 있고, 원하는 것을 클릭하면 됩니다:

선택지 의미
Accept Current Change Local에서 수정한 내용만 받아들이고 GitHub의 내용은 삭제합니다.
Accept Incoming Change Local에서 수정한 내용은 삭제하고 GitHub의 내용만 받아들입니다.
Accept Both Changes 두 변경 내용을 모두 남깁니다. 어느 한쪽도 실수로 버리지 않으려면 먼저 이 선택지를 적용한 뒤, 작성자가 합쳐진 결과를 다시 검토하고 중복되거나 서로 맞지 않는 코드와 문장을 수정하는 과정이 가장 안전합니다.
Accept Current Change, Accept Incoming Change, Accept Both Changes 선택지가 보이는 VS Code conflict 화면

예를 들어, 'Accept Both Changes’를 클릭하면 오른쪽과 같은 화면을 확인할 수 있습니다. 바로 compile하거나 저장하지 말고, 작성자가 합쳐진 코드와 문장을 다시 검토해 중복된 내용을 지우고 서로 맞지 않는 줄을 정리하세요. 의도한 최종 결과인지 확인한 뒤에 compile하거나 저장합니다.

Accept Both Changes가 강조된 VS Code conflict 화면
두 conflict 변경 사항을 모두 반영한 뒤의 VS Code 화면

해결한 파일을 stage하기 전에 다음 명령을 실행하세요.

git status
git diff

conflict marker가 남지 않았는지와 실제로 합쳐진 변경 내용을 확인하고 문서를 compile 또는 build하세요. 이 점검이 모두 끝난 뒤에만 stage와 commit을 진행합니다.

merge 마무리

Source Control에서 'Merge Changes’의 ‘+’ 버튼을 클릭하고, 'Changes’에서도 ‘+’ 버튼을 클릭하세요. 그러면 오른쪽 화면처럼 모든 변경 사항이 Stage된 것을 확인할 수 있습니다.

Merge Changes를 stage할 수 있는 VS Code Source Control 화면
Changes를 stage할 수 있는 VS Code Source Control 화면
모든 conflict 변경 사항이 staged 상태가 된 VS Code Source Control 화면

Commit & Push를 진행하세요. 이로써 충돌이 해결되었습니다.

Commit & Push가 강조된 VS Code Source Control 메뉴

최종 파일 내용이 무엇이어야 하는지 설명할 수 있고, 그 뒤 repository가 다시 clean 상태로 돌아오면 conflict 처리는 올바르게 끝난 것입니다.