페이지 트리

Conflict 발생 시나리오

몇 가지의 원인으로 conflict이 발생한다. 본 문서는 두 명의 개발자가 같은 버전의 저장소를 수정한 후 push 할 때 발생하는 경우를 고려한다.

수정 전 코드 상태

아래는 수정 작업 전의 코드 상태를 나타낸다.

HelloWorld.java
	public void setBoolean(boolean value)
	{
		/*
		 * 추후 플래그 변경시 이벤트 발생 기능 추가 필요
		 */
		this.flagValue = value;
	}

코드 수정

Developer와 Terry Hwang이 유사한 시간대에 코드를 수정한다.

개발자 이름: Alvin

  • 개발자 Terry Hwang 보다 먼저 코멘트 를 작성하여 저장소에 push 함
  • Code review 를 통과하여 저장소에 merge 됨
	public void setBoolean(boolean value)
	{
		/*
		 * 플래그 변수값 변경
		 */
		this.flagValue = value;
	}

개발자 이름: Terry

  • Alvin 의 수정 내용을 인지하지 못하고 같은 코드 위치에 코멘트 작성
	public void setBoolean(boolean value)
	{
		/*
		 * 추후 플래그 변경시 이벤트 발생 기능 추가 필요
		 */
		this.flagValue = value;
	}

Conflict 발생

Terry는 Eclipse에서 변경사항 push를 시도하면서 code conflict 인지

Conflict 해소 절차

Step 1) 원격 저장소의 변경사항 가져오기

프로젝트 선택하여 마우스 우클릭 >> Team >> Pull 선택

Conflicting이 발생한 commit 목록이 표시된다.

Step 2) Conflict 위치 찾기 및 수정

Eclipse의 Project Explorer에 conflict이 발생한 파일을 확인하다. 

Git은 컴파일 오류를 유발고 눈에 띄게 할 목적으로 conflict이 발생한 부분을 <<<<<<< ====== >>>>>>> 로 표시한다.

복잡한 conflict이 발생한 경우 Eclipse에서 제공하는 merge 기능이 유용하다.

Project (또는 conflict이 발생한 파일 선택) >> Team >> Merge Tool

Merge 도구를 통해 수동 merge가 필요한 파일과 위치를 찾을 수 있다.

Merge 도구 메뉴:

아이콘 배치의 순서대로,

  •  좌/우 view 치환
  •  두 변경의 공통 원본 표시
  •  Three way compare: 공통 원본과 함께 두 변경 비교
  •  Conflict가 발생하지 않는 오른 쪽의내용을 모두 왼쪽에 반영
  •  왼쪽 변경을 오른 쪽에 반영
  •  오른 쪽의 변경을 왼쪽에 반영
  •  다음 차이점 위치
  •  이전 차이점 위치
  •  다음 변경
  •  이전 변경

수정을 완료하고 파일을 저장한다.

Step 3) Merge 결과 Commit & Push

Merge 한 파일을 Staged Changes 창으로 이동시키고 "Commit and Push" 또는 Commit 한다.


  • 레이블 없음