Git

[GIT] Branch 병합(Merge)와 충돌(Conflict) 해결

걸어가는 신사 2022. 1. 17. 04:27

위 글은 코드프레소 Java 웹 개발 체험단 활동 중

실무자가 알려주는 Git 활용한 프로젝트 관리 수업을 듣고 정리한 글입니다.

코드프레소 URL : https://www.codepresso.kr/


1. Branch 병합(Merge)

(1) 브랜치 이동

  • 기준이 되는 브랜치로 이동해서 병합해야 한다.
    • master 브랜치를 기준으로 issue 브랜치를 병합할 것이다. (master = master + issue) 
      • issue -> master 
      • $ git checkout master

master 브랜치로 이동

(2) 브랜치 병합

  • 합쳐질 브랜치(issue)를 병합한다.
$ git merge issue

  • 병합 이후 master가 Commit 5를 가리키는 것을 알 수 있다.

병합 이후

(3) 브랜치 삭제

  • 더 이상 사용되지 않는 브랜치는 삭제해주는 것이 좋다.
$ git branch -d issue

 

2. 3-way Merge

  • 3개 커밋을 모두 고려하여 병합하는 방식
    • 1) master와 feature-login 브랜치의 공통 부모 커밋
    • 2) master 브랜치의 최신 커밋
    • 3) feature-login 브랜치의 최신 커밋

3-way Merge

  • 3-way Merge의 결과는 새로운 커밋으로 생성된다.
  • 기준이 되는 브랜치로 이동해서 병합한다.
    • $ git checkout master
  • 합쳐질 브랜치를 병합한다.
    • $ git merge feature-login

병합 이후

 

3. 변경사항의 충돌(Conflict)

  • 만약 feature-login 브랜치와 master 브랜치의 MainService.java 파일이 다른 경우 충돌이 발생한다.
    • 3-way merge를 할 수 없다.
  • $ git merge feature-login

충돌 발생
MainService.java 파일이 달라서 충돌 발생

 

4. 충돌(Conflict) 해결

  • mergetool을 사용한다.
$ git mergetool

  • git mergetool 입력 시 위와같은 화면이 나오는데 vimdiff를 입력해준다.
// vimdiff 입력시 에러 메시지가 발생한다면 아래 설정 후 재시도한다.
$ git config merge.tool vimdiff

$ git mergetool

  • 개발자의 의도대로 수정
  • Conflickt 기호 제거 (<<<<<<. ======, >>>>>>)
  • 수정 완료되면 저장 후 종료한다.
  • 나머지 3-way 창은 수정 없이 종료된다.
  • 병합이 제대로 되었는지 확인 후, commit 생성 => 이때 병합된다.
반응형