branch 병합 시 충돌 해결

|

branch 병합 시 충돌 해결

  • merge 과정에서 파일 내용이 서로 다를 경우 충돌 발생 가능
  • git branch exp로 새로운 브랜치 생성
  • vim master.txt를 만들고, 내용을 a로 작성 후 git add master.txt, git commit -m "6" 으로 커밋
  • git checkout expvim exp.txt를 만들고, 내용은 a, git add exp.txt, git commit -m "7"으로 커밋
  • git checkout mastergit log --branches --graph --decorate를 확인해보면, master는 6번, exp는 7번을 가르키고 있는상태
  • 다음으로 git merge exp를 하면, 두개가 서로 각자 수정한부분이 있기에 merge 커밋이 생김
  • 다음으로 git log --branches --graph --decorate 를 확인해 보면 master와 exp가 병합된 새로운 master가 생성된 상태
  • ls -al 하면 exp 브랜치에서 만들어진 exp.txt가 생성 된 것을 확인 해 볼 수 있음
  • 만약 파일이 같으면 문제가 발생하게 됨
    • master 브랜치와 exp 브랜치에 같은 파일이 존재하는 경우 문제 발생
  • git checkout expvim common.txt, 내용 function a() 작성 후 git add common.txt, git commit -m "8"로 커밋
  • git checkout mastergit merge exp로 merge 실행
  • ls -al로 확인해보면 exp에만 존재하던 common.txt가 master에도 존재하게 되는것을 확인 할 수 있음
  • 다음으로 vim common.txt에서 function b() 라는 내용을 맨 위에 추가 (현재 master branch)
  • git commit -am "9"로 커밋
  • git checkout expvim common.txt에서 function c() 내용을 아래에 추가후 git commit -am "10"으로 커밋
  • git checkout master
    • 현재 common.txt파일에 대해 master와 exp가 서로 다른 부분을 수정하게 되어있는 상태가 됨
  • git merge exp하여 병합
    • vim common.txt로 확인해보면, master에서 작성한 내용과 exp에서 작성한 내용이 둘 다 병합 된 것을 볼 수 있음
    • 즉, 같은 파일임에도 서로 수정한 위치가 다르다면 자동으로 합쳐주게 됨
    • 같은 부분을 수정하게 되면 문제 발생
  • 현재 mater의 common.txt의 내용은 병합된 상태로 function a(), function b(), function c()가 모두 보임
  • git checkout exp 후 common.txt의 내용을 확인해보면 function a(), function c()만 보임
    • exp 브랜치의 내용을 master로만 병합한 상태이므로 master의 추가/변경된 내용이 exp 브랜치에 넘어오지 않은 상태
  • git merge master 하면 common.txt의 내용이 master와 같은 상태가 된 것을 확인 할 수 있음
  • git checkout matervim common.txt에서 function b()를 function b(master)로 수정
  • git commit -am "11" 으로 커밋
  • git checkout expvim common.txt에서 function b()를 function b(exp)로 수정
  • git commit -am "12" 으로 커밋
  • git checkout master로 mater 브랜치로 온 후 git merge exp를 수행
    • Auto-merging common.txt에 대해 CONFLICT 에러 발생한 것을 확인 할 수 있음
    • git status로 상태 확인해보면 unmerged path가 있다며 common.txt 파일이 양쪽 다 수정되어있다고 빨간색으로 뜸
    • 병합 실패한 상태
  • vim common.txt파일을 열음 (내용이 에러에 관해 추가되어있는 상태임)
    • 중간에 =========이 구분자 역할을 함.
    • 구분자를 중심으로 위쪽에 <<<<<<<<<HEAD라고 되어있는 부분이 현재(master 브랜치)의 수정사항
    • 구분자를 중심으로 아래에 >>>>>>>>>exp라고 되어있는는 부분이 다른(exp 브랜치)의 수정사항
    • 현재 git이 자동으로 병합하는것에 실패했기 때문에 merge를 실행한 사용자가 충돌을 해결하라고 위임한 상태임
      • 사용자가 직접 표시된 부분에 대한 코드 수정이 필요함
    • 구분자 및 HEAD, exp를 나타내는 관련 기호들 모두 삭제 후 충돌나는 부분에 대한 수정 실행
      • function b()의 내용을 function(master, exp)로 수정
  • git add common.txtgit status로 확인해보면 초록색으로 conflict 상태가 사라지고 modified 상태가 된 것을 확인 할 수 있음
    • git add conflicted_file은 충돌난 파일에 대한 작업이 끝났다는것을
  • git commit 하면 conflict가 낫던것을 수정했다는 도움말과 함께 merge가 됨
  • git log를 보면 성공적으로 커밋이 된 것을 볼 수 있음
  • vim common.txt로 내용을 보면 잘 처리가 된 것을 확인 할 수 있음