Skip to main content

명령줄을 사용하여 병합 충돌 해결

명령줄 및 텍스트 편집기를 사용하여 병합 충돌을 해결할 수 있습니다.

Platform navigation

병합 충돌은 파일의 동일한 줄을 변경하거나 한 사람이 파일을 편집하고 다른 사용자가 동일한 파일을 삭제할 때 발생합니다. 자세한 내용은 "병합 충돌 정보"을(를) 참조하세요.

팁: GitHub에서 충돌 편집기를 사용하여 끌어오기 요청의 일부인 분기 간에 경쟁하는 줄 변경 병합 충돌을 해결할 수 있습니다. 자세한 내용은 "GitHub에서 병합 충돌 해결"을(를) 참조하세요.

경쟁하는 줄 변경 병합 충돌

경쟁하는 줄 변경으로 인한 병합 충돌을 해결하려면 새 커밋의 다른 분기에서 통합할 변경 내용을 선택해야 합니다.

예를 들어 사용자와 다른 사용자가 동일한 Git 리포지토리의 다른 분기에 있는 동일한 줄에서 styleguide.md 파일을 편집한 경우 이러한 분기를 병합하려고 할 때 병합 충돌 오류가 발생합니다. 이러한 분기를 병합하려면 먼저 이 병합 충돌을 새 커밋으로 해결해야 합니다.

  1. Terminal(터미널)Terminal(터미널)Git Bash를 엽니다.

  2. 병합 충돌이 있는 로컬 Git 리포지토리로 이동합니다.

    cd REPOSITORY-NAME
    
  3. 병합 충돌의 영향을 받는 파일 목록을 생성합니다. 이 예제에서 styleguide.md 파일에 병합 충돌이 있습니다.

    $ git status
    > # On branch branch-b
    > # You have unmerged paths.
    > #   (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #   (use "git add <file>..." to mark resolution)
    > #
    > # both modified:      styleguide.md
    > #
    > no changes added to commit (use "git add" and/or "git commit -a")
    
  4. Visual Studio Code과(와) 같이 즐겨 사용하는 텍스트 편집기를 열고 병합 충돌이 있는 파일로 이동합니다.

  5. 파일에서 병합 충돌의 시작을 보려면 충돌 표식 <<<<<<<에 대해 파일을 검색하세요. 텍스트 편집기에서 파일을 열면 <<<<<<< HEAD 줄 뒤에 헤드 또는 베이스 분기의 변경 내용이 표시됩니다. 다음으로 변경 내용을 다른 분기의 변경 내용과 구분하는 =======이 표시되고 그 뒤에 >>>>>>> BRANCH-NAME이 표시됩니다. 이 예제에서 한 사람은 베이스 또는 헤드 분기에 “문제 열기”라고 썼고 다른 사람은 비교 분기 또는 branch-a에 “IRC에 질문하기”를 썼습니다.

    If you have questions, please
    <<<<<<< HEAD
    open an issue
    =======
    ask your question in IRC.
    >>>>>>> branch-a
    
  6. 분기의 변경 내용만 유지하거나, 다른 분기의 변경 내용만 유지하거나, 두 분기의 변경 내용을 통합할 수 있는 완전히 새로운 변경을 수행할지 결정합니다. 충돌 표식 <<<<<<<, =======, >>>>>>>를 삭제하고 최종 병합에서 원하는 대로 변경합니다. 이 예제에서 두 변경 내용 모두 최종 병합에 통합됩니다.

    If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
    
  7. 변경 내용을 추가하거나 스테이징합니다.

    git add .
    
  8. 주석을 사용하여 변경 내용을 커밋합니다.

    git commit -m "Resolve merge conflict by incorporating both suggestions"
    

이제 명령줄에서 분기를 병합하거나 GitHub에서 원격 리포지토리에 변경 내용을 푸시하고 끌어오기 요청에 변경 내용을 병합할 수 있습니다.

파일 병합 충돌 제거됨

한 분기에서 파일을 삭제하고 다른 사용자가 동일한 파일을 편집하는 파일의 경쟁하는 변경으로 인해 발생하는 병합 충돌을 해결하려면 제거된 파일을 새 커밋에서 삭제할지 또는 유지할지를 선택해야 합니다.

예를 들어 _README.md_와 같은 파일을 편집하고 다른 사용자가 동일한 Git 리포지토리의 다른 분기에서 동일한 파일을 제거한 경우 이러한 분기를 병합하려고 할 때 병합 충돌 오류가 발생합니다. 이러한 분기를 병합하려면 먼저 이 병합 충돌을 새 커밋으로 해결해야 합니다.

  1. Terminal(터미널)Terminal(터미널)Git Bash를 엽니다.

  2. 병합 충돌이 있는 로컬 Git 리포지토리로 이동합니다.

    cd REPOSITORY-NAME
    
  3. 병합 충돌의 영향을 받는 파일 목록을 생성합니다. 이 예제에서 README.md 파일에 병합 충돌이 있습니다.

    $ git status
    > # On branch main
    > # Your branch and 'origin/main' have diverged,
    > # and have 1 and 2 different commits each, respectively.
    > #  (use "git pull" to merge the remote branch into yours)
    > # You have unmerged paths.
    > #  (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #  (use "git add/rm <file>..." as appropriate to mark resolution)
    > #
    > #  deleted by us:   README.md
    > #
    > # no changes added to commit (use "git add" and/or "git commit -a")
    
  4. Visual Studio Code과(와) 같이 즐겨 사용하는 텍스트 편집기를 열고 병합 충돌이 있는 파일로 이동합니다.

  5. 제거된 파일을 유지할지 결정합니다. 텍스트 편집기에서 제거된 파일에 대한 최신 변경 내용을 볼 수 있습니다.

    제거된 파일을 리포지토리에 다시 추가하려면 다음을 수행합니다.

    git add README.md
    

    리포지토리에서 이 파일을 제거하려면 다음을 수행합니다.

    $ git rm README.md
    > README.md: needs merge
    > rm 'README.md'
    
  6. 주석을 사용하여 변경 내용을 커밋합니다.

    $ git commit -m "Resolve merge conflict by keeping README.md file"
    > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
    

이제 명령줄에서 분기를 병합하거나 GitHub에서 원격 리포지토리에 변경 내용을 푸시하고 끌어오기 요청에 변경 내용을 병합할 수 있습니다.

추가 참고 자료