힘내 병합 충돌? 해결 방법은 다음과 같습니다.

6039 단어 gitbeginners
당신이 원했던 것은 두 개의 브랜치를 병합하는 것이었습니다. 대신 다음을 얻었습니다.

Auto-merging my_func.py
CONFLICT (content): Merge conflict in my_func.py
Automatic merge failed; fix conflicts and then commit the result.


병합 충돌! 😱

실제보다 더 심각하게 들립니다.
병합 충돌을 해결하는 방법에 대해 알아보십시오.

1단계: 당황하지 마세요!



병합 충돌은 Git이 두 개의 코드 스니펫을 병합하는 방법을 확신하지 못할 때 발생합니다.
멍청한 일을하지 않도록 귀하의 입력을 원합니다.

병합 충돌 상태는 일시적인 상태입니다. 당신은 병합의 중간에 있습니다.
따라서 이 과정에서 언제든지 확신이 서지 않고 돌아가고 싶다면git merge --abort로 프로세스를 중단하고
아무도 해를 입지 않을 것입니다.

그 보안으로 무장하고 몇 가지 충돌을 해결해 봅시다.

2단계: 발생한 상황을 확인합니다.


featureX라는 브랜치를 생성하고 다음을 변경하기 시작했다고 가정해 보겠습니다.my_func.py라는 파일입니다. 완료되면 마스터에서 다음으로 병합하기로 결정했습니다.
마스터에서 발생한 최신으로 분기를 업데이트하십시오.
이로 인해 병합 충돌이 발생했습니다. 진행하려면 먼저 상황을 파악해야 합니다.
저장소의 상태를 확인하면 됩니다.

$ git status
On branch featureX
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   my_func.py

no changes added to commit (use "git add" and/or "git commit -a")


위의 상태 메시지는 파일my_func.py이 둘 다에서 수정되었음을 나타냅니다.
마스터와 지점에서. 다른 사람도 해당 파일로 작업 중이었을 수 있으며
그들은 당신과 같은 줄을 변경하고 커밋했습니다.
당신보다 먼저 마스터합니다.

3단계: 일부 충돌을 해결합니다.



이것이 파일에 어떤 영향을 미쳤는지 확인할 시간입니다. 원하는 텍스트 편집기에서 해당 파일을 엽니다.
이제 Visual Studio Code와 같은 최신 텍스트 편집기가 있는 경우 다음과 같은 보기가 표시됩니다.



또는 다음과 같이 덜 멋진 것을 볼 수도 있습니다.

<<<<<<< HEAD
def my_func(arg1, arg2):
    return arg1 + arg2
=======
def my_func(a, b):
    c = a + b
    return c
>>>>>>> master


어떻게 보든 그것이 의미하는 바는 다음과 같습니다.
  • <<<<<<< HEAD======= 사이의 모든 항목은 분기의 변경 사항입니다(여기서 HEAD는.).
  • =======>>>>>>> master 사이의 모든 항목은 마스터의 변경 사항입니다.

  • 원하지 않는 줄을 제거한 다음 파일을 저장하기만 하면 됩니다.
    변경 사항이 마스터에 있는 것보다 낫다고 생각할 수도 있습니다. 그 경우,
    마스터에서 오는 라인과 인디케이터 라인을 삭제하십시오.<<<<<<< HEAD , =======>>>>>>> master . (현재 변경 사항 수락을 클릭하면 Visual Studio Code가 이 모든 작업을 수행합니다.) 마지막에 파일은 다음과 같아야 합니다.

    def my_func(arg1, arg2):
        return arg1 + arg2
    


    "둘 다 수정됨"(즉, 충돌) 상태에 있는 모든 파일에 대해 이 작업을 수행합니다.

    4단계: 병합을 계속합니다.



    수정한 모든 파일을 추가했는지 확인합니다.

    $ git add my_func.py
    


    이제 상태를 보면 충돌이 해결되었음을 알 수 있습니다.
    하지만 아직 병합 과정에 있습니다.

    $ git status
    On branch featureX
    All conflicts fixed but you are still merging.
      (use "git commit" to conclude merge)
    


    기본적으로 Git은 계속하려면 권한이 필요합니다. 다음까지 계속하도록 허용합니다.
    커밋하기:

    $ git commit
    


    기본 Git 커밋 메시지를 수락하거나 직접 제공할 수 있습니다.

    이제 로그를 보면 마스터가 브랜치에 병합된 것을 볼 수 있습니다.

    $ git lol
    *   85d57d1 (HEAD -> featureX) Merge branch 'master' into featureX
    |\  
    | * c47eef2 (master) refactor my_func again
    | * 4685dca Refactor my_func.
    * | 1efdaf1 Change argument names in my_func
    |/  
    * ac36ba7 Add info to file.
    * d3a02a4 First commit
    

    git lolgit log 출력을 더 시각적으로 만들기 위해 직접 만든 별칭입니다. 그것에 대해 읽으십시오 here .

    완료!



    이제 세상으로 나가서 갈등을 해결하세요! 💪

    좋은 웹페이지 즐겨찾기