Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

Git 병합 충돌을 해결하는 방법

대부분의 경우 Git은 분기 간의 차이점을 해결하고 병합할 수 있습니다. 이는 개발자가 일반적으로 다른 줄이나 파일을 변경하기 때문입니다. Git이 저장소를 병합할 수 없는 경우가 있습니다. 이러한 상황을 병합 충돌이라고 합니다.

이 가이드에서는 병합이 무엇인지, 병합 충돌이 무엇인지, git merge 충돌을 해결하는 방법에 대해 이야기할 것입니다. 시작하겠습니다!

병합 충돌이란 무엇입니까?

병합 충돌은 Git이 사용자의 도움 없이 두 분기를 병합할 수 없는 경우입니다.

병합은 Git과 같은 버전 제어 시스템의 초석 기능입니다. 이를 통해 개발자는 리포지토리에서 여러 개별 개발 라인을 유지할 수 있습니다. 즉, 한 명의 개발자가 프로젝트의 기본 복사본을 변경하지 않고도 한 분기의 버그 수정 작업을 수행할 수 있습니다.

병합 충돌은 두 가지 시나리오에서 발생합니다.

  • 두 가지가 같은 코드 줄을 변경했습니다.
  • 한 브랜치가 다른 브랜치에서 변경된 파일을 제거했습니다.

병합 충돌이 발생하면 Git에 오류가 표시됩니다. 이것은 Git이 분기를 성공적으로 병합할 수 없음을 알려줍니다.

제거된 파일 충돌을 해결하는 방법

Git 브랜치는 서로 독립적입니다. 이것은 개발자가 다른 분기에 영향을 미치는 변경 없이 한 분기에서 파일을 제거할 수 있음을 의미합니다.

한 분기의 파일이 변경되고 해당 파일이 다른 분기에서 제거되면 병합 충돌이 발생할 수 있습니다. Git은 파일을 삭제할지 변경할지 모르기 때문입니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

dev와 master라는 두 가지 분기가 있다고 가정해 보겠습니다. dev 브랜치에서 README.md 파일을 제거했습니다. 마스터 브랜치에 새 텍스트를 추가했습니다.

git merge 명령을 사용하여 이러한 분기를 병합할 수 있습니다.

git merge dev

이것은 "dev" 브랜치를 master인 현재 브랜치에 병합합니다. 코드가 병합 충돌을 반환했습니다.

자동 병합 README.mdCONFLICT(콘텐츠):README.md에서 병합 충돌이 자동 병합에 실패했습니다. 충돌을 수정한 다음 결과를 커밋합니다.

이 충돌을 해결하기 위해 우리는 결정을 내려야 합니다. 파일을 유지할 것인가, 아니면 변경할 것인가? 파일을 유지하려면 git add 명령을 사용하여 저장소에 다시 추가합니다.

git add README.md

그렇지 않으면 git rm 명령을 사용하여 저장소에서 제거합니다.

git rm README.md

rm command 로컬 저장소에서 파일을 삭제합니다. rm 명령을 사용하기 전에 파일을 제거할 것인지 다시 한 번 확인하십시오.

충돌한 파일을 어떻게 처리할지 선택했으면 변경 사항으로 커밋을 생성하고 분기를 병합할 수 있습니다.

git add README.mdgit commit -m "feat:README.md를 저장소에 추가"git merge dev

git add 명령은 변경 사항을 준비합니다. git commit 명령은 새 커밋을 생성합니다. git merge 명령은 dev 및 master 브랜치를 병합합니다. 병합 충돌을 해결했기 때문에 이제 분기를 병합할 수 있습니다.

파일 변경 충돌을 해결하는 방법

개발자는 때때로 두 개의 다른 분기에서 동일한 파일을 변경합니다. 두 개의 분기가 병합될 때 Git이 유지할 변경 사항을 구별하는 것은 불가능합니다.

이 경우 병합 충돌이 발생합니다. master와 dev라는 두 가지 분기가 있는 저장소가 있다고 가정해 보겠습니다. 두 분기에서 README.md 파일을 변경했습니다. 이로 인해 병합 충돌이 발생했습니다.

자동 병합 README.mdCONFLICT(콘텐츠):README.md에서 병합 충돌이 자동 병합에 실패했습니다. 충돌을 수정한 다음 결과를 커밋합니다.

첫 번째 단계는 병합 충돌의 근본 원인을 식별하는 것입니다. git status 명령을 사용하여 이 작업을 수행할 수 있습니다.

브랜치 마스터에 병합되지 않은 경로가 있습니다. (충돌을 수정하고 "git commit"을 실행) (병합을 중단하려면 "git merge --abort"를 사용) 병합되지 않은 경로:(해상도를 표시하려면 "git add ..."을 사용) 둘 다 수정됨:README.md 

이 메시지에서 README.md 파일이 두 지점에서 수정되었습니다. 이제 병합 충돌을 해결해야 합니다. 텍스트 편집기를 사용하여 README.md 파일을 열어 보겠습니다.

README.md 파일입니다. 이것은 merge-conflicts라는 저장소에 있습니다.<<<<<<>>>>>> 개발

Git은 병합 충돌이 존재하고 충돌 마커를 추가했음을 알리기 위해 파일을 편집했습니다. Git은 병합 충돌을 표현하기 위해 보다 작음, 보다 큼, 등호 문자를 사용합니다.

보다 작음 기호(<)는 현재 분기에 대한 변경 사항을 나타냅니다. 보다 큼 기호(>)는 현재 분기에 병합하려고 시도한 분기에 대한 변경 사항을 알려줍니다. 등호(=)는 차이점을 구분합니다.

이 경우:

  • "이 파일은 메인 브랜치에 있습니다." 마스터 브랜치(또는 HEAD)에 있습니다.
  • "이 파일은 dev 브랜치에 있습니다." 저희 개발 브랜치에 있습니다.

이 병합 도구 충돌을 해결하려면 원하지 않는 텍스트를 제거하기만 하면 됩니다. 코드에서 "이 파일은 분기에 있습니다."라고 말하기를 원한다고 가정해 보겠습니다. 우리는 이 수정안을 다음과 같이 만들 수 있습니다.

README.md 파일입니다. 이것은 merge-conflicts라는 저장소에 있습니다. 이 파일은 분기에 있습니다.

이러한 변경을 수행하고 나면 최종 병합을 수행할 준비가 됩니다. 변경 사항을 준비하고 저장소에 커밋하고 dev를 병합해 보겠습니다. 및 master 가지:

git add .git commit -m "feat:병합 충돌 해결."git merge dev

이제 병합 충돌을 해결했으므로 코드가 성공적으로 병합됩니다.

결론

병합 충돌은 두 분기에서 동일한 텍스트 줄을 변경하거나 한 분기에서 파일을 변경하고 다른 분기에서 해당 파일을 제거할 때 발생합니다.

이 가이드에서는 두 경우 모두에서 병합 충돌을 해결하는 방법에 대해 논의했습니다. 이제 Git 전문가처럼 병합 충돌을 해결할 준비가 되었습니다.