충돌 해결

3143 단어 gitgithubopensource

모든 것이 시작되는 방법



이번 주 실습(3)에서는 충돌과 병합을 연습했습니다. 내 프로그램goURL에 두 가지 기능을 추가하기로 했습니다. 그런 다음 Github에 두 가지 문제를 제기했습니다.
  • CLICOLOR environment variable
  • json output

  • 가지 두 개 만들기



    이 실습 전에 모든 코딩은 마스터 브랜치에서 발생합니다. 그래서 두 개의 가지를 더 만들었습니다. 이 두 분기는 모두 마스터의 현재 상태를 기반으로 합니다.

    git branch issue-5
    git branch issue-6
    


    빨리 감기 병합



    그런 다음 issue-5 브랜치git checkout issue-5 작업을 시작했습니다. 모든 코딩을 마친 후 git commit -m "issue-5 finished" . 그런 다음이 지점을 마스터로 병합했습니다.

    git checkout master
    git merge
    


    이것은 Fast-forward 병합입니다. 브랜치 issue-5가 가리키는 커밋이 마스터 브랜치의 커밋 바로 앞에 있었기 때문입니다.

    충돌 발생



    빠른 병합 후 issue-6 git checkout issue-6 작업을 시작했습니다. 코딩 부분이 원활하게 진행됩니다.

    git commit -m "issue-6 finished"
    git checkout master
    git merge issue-6
    


    자동 병합에 실패했습니다.

    # aborting a merge
    git merge --abort
    


    병합 충돌 해결



    Git은 충돌이 있는 파일에 표준 충돌 해결 마커를 추가합니다.

    <<<<<<< HEAD:index.html
    aaaaaaa
    =======
    bbbbbbbbbbb
    >>>>>>> issu-6:index.html
    


    각 충돌 파일에서 이러한 각 섹션을 해결한 후 각 파일에서 git add를 실행하여 해결된 것으로 표시합니다. 파일을 준비하면 Git에서 해결된 것으로 표시됩니다.

    고급 병합



    내 상황에서는 내 main.go에 너무 많은 마커가 있습니다. 그래서 갈등을 해결할 다른 방법을 찾았습니다. 저는 vim 사용자이고 git은 mergetool을 지정할 수 있습니다.

    git config --global merge.tool vimdiff  
    

    git mergetool를 실행한 후 vimdiff가 실행되었습니다.



    로컬 변경 사항(이 경우 마스터 브랜치)은 왼쪽 상단 창에 있고, 오른쪽 상단 모서리에는 가장 가까운 공통 조상과 issue-6 브랜치가 있습니다. 병합 결과는 하단 창에 있습니다.
  • LOCAL: 현재 브랜치(또는 병합할 브랜치)의 파일입니다
  • .
  • BASE: 공통 조상 - 두 변경 사항이 모두 발생하기 전의 파일 모습
  • REMOTE: 다른 브랜치에서 병합하려는 파일(issue-6)
  • 병합됨: 병합 결과 - 출력으로 저장됩니다
  • .

    vim 내부에서 :diffget REMOTE or :diffg R REMOTE 버전을 가져옵니다. :diffget BASE :diffget LOCAL와 동일합니다. ]c [c 변경 사항에 따라 이동합니다. 모든 충돌에 대해 반복한 다음 실행합니다:wqa.

    병합 결과 커밋




    git commit -m "issue 5 and issue 6 conflict resolved"
    


    결론



    갈등을 만들고 처리하는 것은 길고 재미있는 여정입니다. 우리 모두가 오픈 소스 세계에서 병렬로 작업할 때 방법을 시뮬레이트합니다.

    좋은 웹페이지 즐겨찾기