-
merge/conflictgit 2019. 12. 5. 19:52
[ 1 ] branch를 생성했을 때 git 내부 상황을 알아보자
1) 저장소를 초기화하면 HEAD가 자동으로 생김. HEAD는 refs/heads/master 가리킴
2) 파일 생성 후 commit 하면 refs/heads/master 가 생성되고 이것은 최신 commit의 object ID 와 object ID를 클릭하면 그 내용을 알 수 있다
3) git log를 하면 가장 최신 commit을 알 수 있는데
** 저장소를 초기화하면 HEAD가 생성되고 -> HEAD는 refs/heads/master 가리키고 -> refs/heads/master에는 현재 checkout 된 branck의 가장 최신 commit의 object ID가 있고 여기에는 최신 commit의 정보와 이전 commit(parent로 알 수 있다)의 정보를 알 수 있다
[ 2 ] merge를 하는 과정에서 conflicts가 생겼을 때!
1) 파일이 다르면 merge하는데 별다른 이슈가 생기지 않는다
merge 후 exp branch에 있던 exp.txt가 master branch에 합쳐졌다
2) 같은 파일을 다른 branch에서 수정하더라도 git이 알아서 합쳐준다
3) 같은 파일의 같은 부분을 수정한 후 merge 하면 automatic merge가 실패했다고 뜬다
git status로 살펴보면 양쪽이 다 수정되어있다고 뜬다
vim을 실행시키면 ===구분자를 기준으로 위에가 현재 checkout branch에서 수정된 부분
아래가 다른 branch에서 수정된 부분
보고 알맞게 수정해준다
수정 후 git add하면 잘 수정되었다고 뜬다
후에 git commit 하면 conflicts 났던 정보를 알려준다
수정완료
++191209 추가
1) 두개의 브랜치에서 같은 부분을 수정한 후 merge했더니 conflict 발생!
2) $ git config --global merge.tool kdiff3
병합할 때 사용할 도구 kidff3 셋팅
3) $ git mergetool
git에게 tool을 사용하여 병합하도록 명령을 내림
***에러
사용할 수 없다고 해서 다운받음
설치 후에 설정 다시 함
$ git config --global merge.tool kdiff3
$ git config --global --add mergetool.kdiff3.path "C:\Program Files\KDiff3\kdiff3.exe"
***
git config --global --add mergetool.kdiff3.trustExitCode false <==이것도 같이 하라고 나오는데 설정 넣으면 오류 떠서 빼버림
(https://stackoverflow.com/questions/33308482/git-how-configure-kdiff3-as-merge-tool-and-diff-tool)
설정하는 과정에서 merge.tool 두번 입력했더니 실행안되고 오류남
지우고 다시 설정하려고 unset했는데 안지워짐!!!
git config --global --unset merge.tool
에디터 켜서 mergetool 관련된 설정 다 지움
git config --edit --global
성공^.^..
***
** 설정 보기 git config --list
** 전역설정 보기 git config --global --list
conflict 난 상황에서 log를 찍어보면
공통적인 commit에서 두개의 수정사항이 있다!
(공통적인 commit = base)
각 섹션에 맞는 알파벳 (ABC)을 선택해서 수정한다
Merge Conflict 상태에서는 수정할 수 없기때문에 다르게 수정하고 싶다면 섹션을 하나 선택한 후 수정한다
저장 후 status를 찍어보면
merge 완료!
## 협업을 할 때
3 way merge : 나와 base와 상대방의 코드가 전부 다른 것(conflict)을 제외하고 모두 auto merge
2 way merhe : 나와 상대방의 코드를 비교하여 다른 부분은 전부 conflict
'git' 카테고리의 다른 글
working copy/index/repository (0) 2019.12.09 reset/checkout (0) 2019.12.06 stash (0) 2019.12.05 branch (0) 2019.12.02 index / object (0) 2019.12.02