주제 4

충돌 해결

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

conflict의 의미

Push가 무사히 이루어지려면 'GitHub에 업로드되어 있는 파일’과 '수정을 시작할 때 Local에 있던 파일’이 같아야 합니다.

그렇지 않은 경우에 push를 하면 충돌(conflict)이 발생합니다(아래 사진 참고). 이를 해결하는 방법을 배워보도록 하겠습니다.

먼저 pull하라는 VS Code push 경고

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

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

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

세 가지 선택지

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

선택지 의미
Accept Current Change Local에서 수정한 내용만 받아들이고 GitHub의 내용은 삭제합니다.
Accept Incoming Change Local에서 수정한 내용은 삭제하고 GitHub의 내용만 받아들입니다.
Accept Both Changes Local과 GitHub의 내용을 모두 받아들입니다. 가장 안전합니다.
Accept Current Change, Accept Incoming Change, Accept Both Changes 선택지가 보이는 VS Code conflict 화면

예를 들어, 'Accept Both Changes’를 클릭하면 오른쪽과 같은 화면을 확인할 수 있습니다. 이제 컴파일(혹은 저장)을 실행하세요.

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

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 처리는 올바르게 끝난 것입니다.