Git resolving merge conflicts as Mark resolved (mark resolved 옵션으로 해결)
이전 포스팅 : Git merging branches (브랜치 합치기)
브랜치를 합치는 도중에 충돌이 일어날 수 있다. A브랜치와 B브랜치가 있다고 치자. A와 B브랜치의 같은 부분이 다른 코드로 작성되어 있을 때 두 개의 브랜치를 합치면 충돌이 일어난다. merge conflicts 해결방법 중에서 충돌이 일어난 코드를 자신이 직접 수정하여 해결하는 방법을 알아보자.
Resolving merge conflicts - mark resolved
1. master 브랜치를 checkout한 상태(HEAD가 master브랜치인 상태)로 아래와 같이 testbranch2 브랜치를 생성한다.
2. testbranch2 브랜치를 checkout 한다. (HEAD : testbranch2 -> working directory가 testbranch2 상태가 됨 ;그럴듯한 언어로 어떻게 말해야될 지 모르겠다)
3. Working Directory의 wow.java 파일이다. 1번에서 master가 checkout된 상태로 Commit: Working copy parent 옵션을 선택했기 때문에 master의 Working Directory와 동일하다.
4. 소스코드 'teacher' 를 추가한다(HEAD : testbranch2). 그리고 커밋한다.
5. master를 checkout하고 소스코드 'student'를 추가한다(HEAD : master). 그리고 커밋한다.
6. 현재 인덱스이다.
7. master 브랜치에 testbranch2 브랜치를 merge하기위해서, master 브랜치를 checkout하고 testbranch2를 우클릭하여 Merge testbranch2 into current branch 를 클릭한다.
8. Confirm Merge 확인창이 뜨면 확인 을 클릭한다.
9. (4),(5)번에서 소스코드의 같은 부분을 수정했기 때문에 Merge Conflicts가 발생했다. Merge를 계속하기 전 해결하라는 경고창이다. conflict가 발생한 파일을 클릭하고 'Resolve Conflicts' 메뉴를 이용하면 된다는 설명이다.
10. merge conflict가 발생해서 merge가 되지 않은 상태이다. Graph도 회색으로 표시된다. staged files와 unstaged files에 conflict가 발생한 파일이 표시된다. 두 파일은 내용이 동일하다.
11. conflict가 발생한 파일이다. <<<<<< HEAD 와 ====== 사이의 소스코드는 HEAD(=checkout한 브랜치 =현재 브랜치)의 변경사항이고, ======와 >>>>>> testbranch2 사이의 소스코드는 testbranch2의 변경사항이다.
12. 원하는 대로 소스코드를 수정한다.
13. merge conflict가 발생한 파일을 우클릭하여 Resolve Conflicts 메뉴의 Mark Resolved 옵션을 클릭한다. 그러면 git은 충돌이 해결된 것으로 보고 conflicted 파일을 삭제한 후 수정한 working directory를 추적한다. (Resolve Conflicts : Resolve Using 'Mine' & 'Theirs' 옵션은 Git 되돌리기 (부제: revert, reverse) 참고)
14. mark 확인 창이 뜨면 OK를 클릭한다.
15. 그러면 Git은 해당 파일이 해결된 것으로 인식하고 Working Directory에서 수정한 파일을 추적한다.
16. commit을 클릭하면 자동으로 commit 메시지가 입력되어 있다. 물론 수정가능하다.
17. commit이 되고 브랜치가 합쳐졌다.
브랜치를 합치는 도중에 충돌이 일어날 수 있다. A브랜치와 B브랜치가 있다고 치자. A와 B브랜치의 같은 부분이 다른 코드로 작성되어 있을 때 두 개의 브랜치를 합치면 충돌이 일어난다. merge conflicts 해결방법 중에서 충돌이 일어난 코드를 자신이 직접 수정하여 해결하는 방법을 알아보자.
Resolving merge conflicts - mark resolved
1. master 브랜치를 checkout한 상태(HEAD가 master브랜치인 상태)로 아래와 같이 testbranch2 브랜치를 생성한다.
2. testbranch2 브랜치를 checkout 한다. (HEAD : testbranch2 -> working directory가 testbranch2 상태가 됨 ;
3. Working Directory의 wow.java 파일이다. 1번에서 master가 checkout된 상태로 Commit: Working copy parent 옵션을 선택했기 때문에 master의 Working Directory와 동일하다.
4. 소스코드 'teacher' 를 추가한다(HEAD : testbranch2). 그리고 커밋한다.
5. master를 checkout하고 소스코드 'student'를 추가한다(HEAD : master). 그리고 커밋한다.
6. 현재 인덱스이다.
7. master 브랜치에 testbranch2 브랜치를 merge하기위해서, master 브랜치를 checkout하고 testbranch2를 우클릭하여 Merge testbranch2 into current branch 를 클릭한다.
8. Confirm Merge 확인창이 뜨면 확인 을 클릭한다.
9. (4),(5)번에서 소스코드의 같은 부분을 수정했기 때문에 Merge Conflicts가 발생했다. Merge를 계속하기 전 해결하라는 경고창이다. conflict가 발생한 파일을 클릭하고 'Resolve Conflicts' 메뉴를 이용하면 된다는 설명이다.
10. merge conflict가 발생해서 merge가 되지 않은 상태이다. Graph도 회색으로 표시된다. staged files와 unstaged files에 conflict가 발생한 파일이 표시된다. 두 파일은 내용이 동일하다.
11. conflict가 발생한 파일이다. <<<<<< HEAD 와 ====== 사이의 소스코드는 HEAD(=checkout한 브랜치 =현재 브랜치)의 변경사항이고, ======와 >>>>>> testbranch2 사이의 소스코드는 testbranch2의 변경사항이다.
12. 원하는 대로 소스코드를 수정한다.
13. merge conflict가 발생한 파일을 우클릭하여 Resolve Conflicts 메뉴의 Mark Resolved 옵션을 클릭한다. 그러면 git은 충돌이 해결된 것으로 보고 conflicted 파일을 삭제한 후 수정한 working directory를 추적한다. (Resolve Conflicts : Resolve Using 'Mine' & 'Theirs' 옵션은 Git 되돌리기 (부제: revert, reverse) 참고)
14. mark 확인 창이 뜨면 OK를 클릭한다.
15. 그러면 Git은 해당 파일이 해결된 것으로 인식하고 Working Directory에서 수정한 파일을 추적한다.
16. commit을 클릭하면 자동으로 commit 메시지가 입력되어 있다. 물론 수정가능하다.
17. commit이 되고 브랜치가 합쳐졌다.
댓글
댓글 쓰기