충돌 해결
3143 단어 gitgithubopensource
모든 것이 시작되는 방법
이번 주 실습(3)에서는 충돌과 병합을 연습했습니다. 내 프로그램goURL에 두 가지 기능을 추가하기로 했습니다. 그런 다음 Github에 두 가지 문제를 제기했습니다.
가지 두 개 만들기
이 실습 전에 모든 코딩은 마스터 브랜치에서 발생합니다. 그래서 두 개의 가지를 더 만들었습니다. 이 두 분기는 모두 마스터의 현재 상태를 기반으로 합니다.
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 브랜치가 있습니다. 병합 결과는 하단 창에 있습니다.
vim 내부에서
:diffget REMOTE or :diffg R
REMOTE 버전을 가져옵니다. :diffget BASE :diffget LOCAL
와 동일합니다. ]c [c
변경 사항에 따라 이동합니다. 모든 충돌에 대해 반복한 다음 실행합니다:wqa
.병합 결과 커밋
git commit -m "issue 5 and issue 6 conflict resolved"
결론
갈등을 만들고 처리하는 것은 길고 재미있는 여정입니다. 우리 모두가 오픈 소스 세계에서 병렬로 작업할 때 방법을 시뮬레이트합니다.
Reference
이 문제에 관하여(충돌 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yzwdroid/conflict-resolved-4gbe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)