주제 4
충돌 해결
conflict는 재난이 아니라, 겹치는 수정 중 어떤 최종 텍스트를 남길지 Git이 도움을 요청하는 상태입니다.
conflict의 의미
GitHub에 내 컴퓨터에 아직 없는 변경이 있으면 VS Code가 push를 멈추고 먼저 pull하라고 안내할 수 있습니다. Pull은 GitHub의 변경을 내 컴퓨터로 가져와 내가 작업한 내용과 합치는 과정입니다.
두 버전에서 같은 부분을 서로 다르게 수정해 Git이 자동으로 합치지 못하면 최종 내용을 직접 고르도록 요청하는데, 이것이 conflict입니다.
Pull 전에 git status를 실행하세요. commit하지 않은 작업이 보이면 먼저 commit하거나 git stash로 잠시 보관합니다.
'Cancel’을 클릭하고 Pull을 진행하세요.
그러면 Stage가 취소되면서 아래와 같은 화면을 확인할 수 있습니다. 초록색 상자 안에는 Local에서 수정한 내용을 보여주고, 파란색 상자 안에는 GitHub의 내용을 보여줍니다.
세 가지 선택지
세 가지 선택지가 있고, 원하는 것을 클릭하면 됩니다:
| 선택지 | 의미 |
|---|---|
Accept Current Change |
Local에서 수정한 내용만 받아들이고 GitHub의 내용은 삭제합니다. |
Accept Incoming Change |
Local에서 수정한 내용은 삭제하고 GitHub의 내용만 받아들입니다. |
Accept Both Changes |
두 변경 내용을 모두 남깁니다. 어느 한쪽도 실수로 버리지 않으려면 먼저 이 선택지를 적용한 뒤, 작성자가 합쳐진 결과를 다시 검토하고 중복되거나 서로 맞지 않는 코드와 문장을 수정하는 과정이 가장 안전합니다. |
예를 들어, 'Accept Both Changes’를 클릭하면 오른쪽과 같은 화면을 확인할 수 있습니다. 바로 compile하거나 저장하지 말고, 작성자가 합쳐진 코드와 문장을 다시 검토해 중복된 내용을 지우고 서로 맞지 않는 줄을 정리하세요. 의도한 최종 결과인지 확인한 뒤에 compile하거나 저장합니다.
해결한 파일을 stage하기 전에 다음 명령을 실행하세요.
git status
git diff
conflict marker가 남지 않았는지와 실제로 합쳐진 변경 내용을 확인하고 문서를 compile 또는 build하세요. 이 점검이 모두 끝난 뒤에만 stage와 commit을 진행합니다.
merge 마무리
Source Control에서 'Merge Changes’의 ‘+’ 버튼을 클릭하고, 'Changes’에서도 ‘+’ 버튼을 클릭하세요. 그러면 오른쪽 화면처럼 모든 변경 사항이 Stage된 것을 확인할 수 있습니다.
Commit & Push를 진행하세요. 이로써 충돌이 해결되었습니다.
최종 파일 내용이 무엇이어야 하는지 설명할 수 있고, 그 뒤 repository가 다시 clean 상태로 돌아오면 conflict 처리는 올바르게 끝난 것입니다.