< 현재 상태 >
"mater" branch에 test.txt 파일을 만든 후 커밋했다. "exp" branch를 만들어 "master"와 "exp" branch의 내용을 같게 만들었다.
< branch 간 파일이 같을 때 서로 다른을 수정했을 경우 병합(Merge) > - 충돌 안 남.
"exp" branch에서 test.txt 파일 뒷 부분에 내용을 추가하고 커밋했다.
"master" branch에서 test.txt 파일 앞 부분에 내용을 추가하고 커밋했다.
현재 "master" branch와 "exp" branch에서 test.txt 파일에 대해 수정한 부분이 서로 다르다.
"master" branch에서 "exp" branch를 merge 했다. 위 사진에서와 같이 병합이 성공적으로 이루어졌다. test.txt에 대해 수정한 부분이 다르기 때문에 "master" branch에서의 test.txt 파일 뒤에 "exp" branch에서 test.txt 파일에 대해 수정한 내용이 추가됬다.
< 현재 상태 >
다음 예제의 편의를 위해 "exp" branch에서 "master" branch를 merge 했다. 위 사진에서 merge 후에 "master" branch와 "exp" branch가 "Fast-forward" 방식으로 merge 된 것을 볼 수 있다. branch 간에 현 상태를 비교해보니 서로 같다.
< branch 간 파일이 같은데 서로 같은 부분을 수정했을 경우> - 충돌 남.
"exp" branch에서 test.txt 파일 안 "a" 함수 매개변수를 수정하고 커밋했다.
"master" branch에서 test.txt 파일 안 "a" 함수 매개변수를 수정하고 커밋했다.
현재 "master" branch와 "exp" branch에서 test.txt 파일에 대해 수정한 부분이 "a" 함수 매개변수로 같다.
"master" branch에서 "exp" branch를 merge 했는 데 "CONFLICT" 충돌이 났다. "git status"로 상태를 확인해보니 "Unmerged"라고 출력된다. 이렇게 branch 간에 같은 파일의 같은 부분을 수정할 시 충돌이 나고 merge가 되지 않는다.
< branch 간 파일이 같은데 서로 같은 부분을 수정했을 경우> - 충돌 해결법
충돌 후 "test.txt" 파일을 보면 위와 같이 보인다. HEAD는 현재 branch를 말하고 "======"구분자 사이로 충돌난 부분이 보인다. 위 사진을 보면 "HEAD" 즉 "master" branch는 충돌 부분이 "function a(master){"로 되어 있고 "exp" branch는 "function a{exp){"로 되어 있다. 이렇게 난 충돌 해결 방법은 충돌난 파일 "test.txt" 파일을 직접 수정 후 "git add '충돌 파일 이름'"을 해주면 충돌에 대한 처리 작업을 끝냈다는 것을 git에서 알려줄 수 있다. 다음 사진을 보면 알 수 있다.
충돌이 해결된 것을 볼 수 있다.
그 다음 git commit로 커밋 메시지를 보면 "Conflicts:"로 충돌 관련 내용이 적혀있다.
merge 한 버전이 커밋 잘 된 것을 확인할 수 있다.
'Git(생활코딩)' 카테고리의 다른 글
Git - branch 병합(fast-forward/Not fast-forward) (0) | 2017.06.14 |
---|---|
Git 혁신(2) - branch 정보 확인 (0) | 2017.06.13 |
Git 혁신(1) - branch (0) | 2017.06.12 |
Git 원리(2) - commit (0) | 2017.06.11 |
Git 원리(1) - git add (0) | 2017.06.09 |