주제 4
충돌 해결
conflict는 재난이 아니라, 겹치는 수정 중 어떤 최종 텍스트를 남길지 Git이 도움을 요청하는 상태입니다.
conflict의 의미
Push가 무사히 이루어지려면 'GitHub에 업로드되어 있는 파일’과 '수정을 시작할 때 Local에 있던 파일’이 같아야 합니다.
그렇지 않은 경우에 push를 하면 충돌(conflict)이 발생합니다(아래 사진 참고). 이를 해결하는 방법을 배워보도록 하겠습니다.
'Cancel’을 클릭하고 Pull을 진행하세요.
그러면 Stage가 취소되면서 아래와 같은 화면을 확인할 수 있습니다. 초록색 상자 안에는 Local에서 수정한 내용을 보여주고, 파란색 상자 안에는 GitHub의 내용을 보여줍니다.
세 가지 선택지
세 가지 선택지가 있고, 원하는 것을 클릭하면 됩니다:
| 선택지 | 의미 |
|---|---|
Accept Current Change |
Local에서 수정한 내용만 받아들이고 GitHub의 내용은 삭제합니다. |
Accept Incoming Change |
Local에서 수정한 내용은 삭제하고 GitHub의 내용만 받아들입니다. |
Accept Both Changes |
Local과 GitHub의 내용을 모두 받아들입니다. 가장 안전합니다. |
예를 들어, 'Accept Both Changes’를 클릭하면 오른쪽과 같은 화면을 확인할 수 있습니다. 이제 컴파일(혹은 저장)을 실행하세요.
merge 마무리
Source Control에서 'Merge Changes’의 ‘+’ 버튼을 클릭하고, 'Changes’에서도 ‘+’ 버튼을 클릭하세요. 그러면 오른쪽 화면처럼 모든 변경 사항이 Stage된 것을 확인할 수 있습니다.
Commit & Push를 진행하세요. 이로써 충돌이 해결되었습니다.
최종 파일 내용이 무엇이어야 하는지 설명할 수 있고, 그 뒤 repository가 다시 clean 상태로 돌아오면 conflict 처리는 올바르게 끝난 것입니다.