본문 바로가기
프로그래밍 개발/GIT

GITHUB+sourceTree 브렌치 pull 및 충돌 해결

by Jinseok Kim 2020. 11. 9.
반응형

브렌치 충돌 발생 상황

 

 

 

상황1.

  1. 합치려는 브랜치가 헤드 브랜치로부터 시작되었다.
  2. 그 사이 헤드 브랜치에는 전혀 갱신이 없었다.

 

위 그림은 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋한 상태이다. 여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동한다.

 

 

 

이런 상황을 fast-forward 라고 한다. 단순히 브랜치의 참조만 갱신되는 상황이라고 볼 수 있다.

 

 

 

 

 

 

 

상황2.

 

  1. 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
  2. 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
  3. 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우

 

 

 

이 경우에도 기본이 되는 헤드 브랜치에서 타겟 브랜치를 병합하면 되긴 하는데, 이 때 여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있다.  충돌이 생기면 에러 메시지 같은게 나온다.

 

 

  1. 보통 가장 최신 내용 하나만 선택하면 되는 경우가 많다.
  2. 그리고 최신 내용은 보통 타겟 브랜치에 있는 경우가 많다.
  3. 여러 파일에 변경 사항이 혼재해 있는 경우도 내가 개발했으므로 크게 어렵지 않다.

 

 

 

소스트리와 에디터를 사용하면 어렵지 않게 충돌 해결이 가능하다. 잘 해결했다면 아래와 같은 모양이 됩니다.

 

 

 

 

 

 

 

 

충돌 충돌 오류 해결방법

 

 

 

 

 

 

안 쓰는 브랜치 삭제하기

 

  • 현재 브랜치(HEAD) 가 아닌 경우 간단하게 삭제 가능하다.
  • 브랜치를 삭제했을 경우 사라지는 커밋이 있는지 없는지 확인한다.

 

 

 

 

 

git pull

 

  • 서버의 내용이 최신일 경우 pull을 적용한다.
  • 충돌이 날 수 있다.
  • pull = fetch + merge

 

 

 

 

 

충돌의 발생원인

 

  • 자동병합을 실패했을 경우 발생한다.
  • 주로 두 커밋이 같은 파일을 편집했을 경우 발생한다.

 

 

 

 

 

 

 

일반적인 해결 방법

 

<<<<<, ====와 같이 충돌 범위를 자동으로 알려준다. 알려준 범위를 지우면 된다.

 

  • 에디터를 이용한 해결한다.
  • 병합툴을 이용한 해결한다.
  • sourceTree를 이용한 해결한다.

 

 

 

 

 

에디터를 사용한 해결

 

  • 충돌난 파일을 꼼꼼히 읽어가며 수동으로 수정한다.

 

 

 

 

 

 

내것 또는 저장소 것 선택하기

 

 

  • 혼자서 작업할 경우 일반적으로 두 변경사항 중 하나(주로 내 것)가 최신이고 정답일 가능성이 높다.
반응형

댓글