ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • merge/conflict
    git 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

    (https://stackoverflow.com/questions/42448256/how-can-i-re-configure-diff-merge-tools-to-its-default-settings-clickable-lin)

     

    성공^.^..

    ***

    ** 설정 보기 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

    댓글

Designed by Tistory.