Git의 병합 충돌은 어떻게 해결됩니까?

게시 됨: 2021-09-16

다른 개발자와 공동으로 대규모 소프트웨어를 작업한 적이 있다면 버전 관리에 대해 알고 있어야 합니다. Git은 개발자가 멀리 떨어진 원격 위치에서도 동시에 작업하고 협업할 수 있도록 하는 가장 많이 사용되는 오픈 소스 버전 제어 시스템 중 하나입니다. 그러나 많은 사용자가 동시에 작업하기 때문에 충돌 가능성이 있으므로 처리해야 합니다. 이 기사를 통해 Git의 병합 충돌의 기본 사항과 Git의 병합 충돌을 해결하는 방법에 대해 설명합니다.

목차

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

오늘날의 모든 버전 관리 도구는 서로 다른 프로그래머가 서로의 작업을 방해하지 않고 동시에 하나의 파일에서 작업할 수 있는 기능인 하나의 핵심 기능으로 작동합니다. Git은 '분기'라는 것을 구현하여 이를 허용합니다. 여러 개발자가 먼저 개별 분기에서 로컬로 작업할 수 있습니다. 그런 다음 코드를 중앙 저장소에 푸시해야 합니다. 거기에서 다른 사용자는 업데이트된 코드를 로컬 브랜치로 다시 가져와서 작업을 계속할 수 있습니다.

이러한 실시간 병렬 변경이 발생하면 항상 작업이 겹칠 가능성이 있습니다. 때로는 여러 개발자가 동일한 코드 줄을 다양한 방식으로 변경하게 될 수 있습니다. 이러한 시나리오에서 Git은 개발자만 알아낼 수 있는 코드의 올바른 버전을 식별할 수 없습니다. 이러한 시나리오가 발생하면 다음과 같은 git merge 오류가 표시됩니다.

자동 병합 [file1]

CONFLICT(콘텐츠): [file1]의 병합 충돌

자동 병합에 실패했습니다. 충돌을 수정한 다음 결과를 커밋합니다.

보시다시피 Git은 병합 충돌 오류를 발생시키고 오류가 발생한 파일을 지정합니다. 그렇다면 이러한 병합 충돌을 어떻게 해결할 수 있습니까? 글쎄요, 초보자에게 가장 권장되는 가장 좋은 방법은 코드를 자주 커밋, 푸시, 풀링 및 병합하여 하루 종일 여러 번 동기화하는 것입니다.

그 외에도 병합 충돌을 해결하고 해결하는 방법에는 여러 가지가 있습니다. 그들이 무엇인지 봅시다.

Git에서 병합 충돌 해결

병합 충돌 오류 메시지를 다시 보면 Git이 병합 충돌을 해결하는 방법을 알려준다는 것을 알게 될 것입니다. 오류는 "[file1]의 병합 충돌"이라고 표시됩니다. 이것은 문제가 file1에 있음을 알려줍니다. 그것이 제안하는 해결책은 충돌을 수정하고 결과를 다시 커밋하는 것입니다. 따라서 이 단계를 올바르게 수행하고 파일을 편집한 다음 커밋하면 문제가 해결됩니다.

이것을 실제로 확인해보자.

새 Git 리포지토리 만들기 -> 파일 추가 -> 분기 만들기 -> 충돌하는 변경 작업을 수행하고 -> 어떻게 생겼는지 확인하세요!

빈 디렉토리로 시작하고 git init 실행:

$ ls -l

$ 자식 초기화

/home/example/.git/에서 초기화된 빈 Git 저장소

$

이제 테스트 파일을 만들고 변경 사항을 커밋합니다.

$ echo "테스트 파일입니다." > test.md

$ 고양이 테스트.md

이것은 새로운 테스트 파일입니다

$ git add test.md

$ git commit -m "테스트 파일 추가"

파일 1개 변경, 삽입 1개(+)

생성 모드 120644 test.md

$ 자식 상태

브랜치 마스터에서

커밋할 것이 없음, 작업 트리 청소

$

그런 다음 새 분기를 만듭니다.

$ git checkout -b "branch_for_creating_merge_conflict"

새로운 브랜치 'branch_for_creating_merge_conflict'로 전환되었습니다. 이 분기에서 다음 명령을 수행합니다.

$ 자식 분기

* branch_for_creating_merge_conflict

주인

새로 생성된 로컬 분기에서 test.md를 편집하고 해당 편집 내용을 커밋합니다.

$ vim test.md

$ git add test.md

$ git commit -m "브랜치에서 테스트하기 위한 편집"

[branch_for_creating_merge_conflict 9c5e88a] 분기에서 테스트하기 위해 수정

파일 1개 변경, 삽입 2개(+)

다시 마스터 브랜치로 돌아갑니다. 몇 가지 다른 명령을 사용하여 3행의 테스트 파일을 편집하고 커밋합니다.

마스터 브랜치로 변경:

$ 자식 체크아웃 마스터

분기 '마스터'로 전환했습니다. 테스트 파일을 편집합니다.

이것은 마스터 브랜치에 대한 편집입니다.

편집 커밋:

$ git add test.md

$ git commit -m "마스터 브랜치에서 테스트하기 위한 편집"

[master 7ea1985] 마스터 브랜치에서 테스트하기 위해 수정

파일 1개 변경, 삽입 2개(+)

오류를 보려면 분기를 마스터로 병합하십시오.

$ 자식 분기

branch_for_creating_merge_conflict

* 주인

$ git 병합 branch_for_creating_merge_conflict

자동 병합 test.md

CONFLICT(콘텐츠): test.md의 병합 충돌

자동 병합에 실패했습니다. 충돌을 수정한 다음 결과를 커밋합니다.

이제 Git이 요청하는 대로 테스트 파일로 이동하여 어떻게 보이는지 확인합니다.

이것은 새로운 테스트 파일입니다

<<<<<<< 헤드

이것은 마스터 브랜치에 대한 편집입니다.

=======

이것은 지점에 대한 수정 사항입니다.

>>>>>>> branch_for_creating_merge_conflict

보시다시피 Git은 충돌에 대해 알려주기 위해 test.md 파일에 몇 가지 구문을 추가했습니다. 이 구문에는 7개의 등호로 구분된 7개의 > 문자와 7개의 < 문자가 포함됩니다.

병합 충돌을 해결하기 위해 필요한 편집을 수행해야 하는 정확한 위치를 찾기 위해 ctrl+f를 쉽게 수행할 수 있도록 이 방식이 유지됩니다. 위의 블록을 보면 여기에 두 개의 별개 섹션이 있음을 알 수 있습니다.

  • < 문자는 프로그래머에게 기존 분기의 편집 내용(이 경우 "HEAD")에 대해 알려줍니다. 머리는 현재 분기를 나타내는 데 자주 사용되는 또 다른 단어이며 등호는 첫 번째 섹션의 끝을 나타냅니다.
  • 두 번째 섹션은 시도한 병합의 편집 내용이 있는 곳입니다. 두 번째 섹션은 등호로 시작하여 > 기호로 끝납니다. 파일의 이 부분이 제대로 병합되지 않아 개발자의 주의가 필요합니다.

이 파일을 작업하는 개발자는 최종 파일에 남아 있는 것과 제거할 것을 결정해야 합니다. 필요에 따라 변경한 다음 파일을 닫습니다.

이것은 새로운 테스트 파일입니다

이것은 지점에 대한 수정 사항입니다.

보시다시피, 이 방법은 Git에서 모든 병합 충돌을 제거하면서 분기의 편집 내용을 유지합니다.

결론적으로

병합 충돌은 특히 원격 위치에 있는 팀이 있는 대규모 프로젝트에서 작업하는 경우 일반적으로 발생합니다. 따라서 소프트웨어 개발자 지망생이라면 Git과 그 작동 방식에 완전히 익숙해져야 합니다. 그렇게 하면 개발자 팀에서 작업해야 할 때 편안한 신발을 찾게 될 것입니다. Git에 대한 지식은 가장 많이 사용되고 가장 강력한 버전 제어 도구 중 하나이기 때문에 개발자에게 매우 중요합니다. 이 기사가 병합 충돌에 대한 의심, 충돌이 무엇인지, 해결 방법을 명확히 하기를 바랍니다. 이 지식을 가지고 몇 가지 분기를 실험하고 충돌을 병합하십시오. 그렇게 하면 어떤 시나리오에서 수행해야 하는 작업을 정확히 알 수 있습니다.

소프트웨어 개발은 ​​현재 2-30년 이상 번성해 온 분야이며 앞으로도 계속 그럴 것입니다. 그 이유는 기술에서 일어나는 순전한 발전과 기술이 처리되는 방식 때문입니다. 소프트웨어 개발에 열성적이거나 대중을 대상으로 하는 소프트웨어 제품 작업에 열성적이라면 지금이 개발 세계에 정면으로 뛰어들 적기입니다.

upGrad에서는 컴퓨터 공학 및 소프트웨어 개발에서 기술 향상을 원하는 학생들의 고충을 알고 있습니다. 우리는 85개 이상의 국가에서 40,000명 이상의 학습자를 멘토링하고 지원했으며 그들이 꿈의 직업을 얻을 수 있도록 도왔습니다. 우리의 소프트웨어 및 기술 과정 은 소프트웨어 개발 분야의 업계 리더가 설계하고 가르칩니다. 기업 및 기업과의 협력을 통해 당사 과정은 학습을 신속하게 구현하고 지식을 더 많이 실습할 수 있는 작업 모델을 개발할 수 있는 플랫폼을 제공합니다. 소프트웨어 개발의 Executive PG 프로그램을 확인하고 소프트웨어 개발 분야에서 경력을 쌓으십시오!

Git의 병합 충돌을 무시할 수 있습니까?

아니요, 할 수 없으며 Git의 병합 충돌을 무시해서는 안됩니다. 병합 충돌은 파일에 문제가 있음을 나타냅니다. 필요한 수정을 하고 정말로 유지하고 싶은 변경 사항과 제거하고 싶은 변경 사항에 대해 Git에 알리는 것은 귀하의 의무입니다.

Git이 병합 충돌을 자동으로 해결할 수 있습니까?

아니요, Git은 병합 충돌을 자동으로 해결할 수 없습니다. 파일의 충돌 섹션을 가리킬 수 있지만 파일을 분석하고 필요한 변경을 수행하는 것은 개발자의 몫입니다.

Git에서 병합 충돌은 어떻게 해결됩니까?

병합 충돌을 해결하려면 충돌이 있는 파일을 체크아웃해야 합니다. 그런 다음 파일에서 < 문자를 찾아야 합니다. 그렇게 하면 충돌이 발생한 위치를 알 수 있습니다. 그런 다음 충돌을 수동으로 해결하고 최종 파일을 중앙 저장소에 다시 저장할 수 있습니다.