병합 충돌은 파일의 동일한 줄을 변경하거나 한 사람이 파일을 편집하고 다른 사용자가 동일한 파일을 삭제할 때 발생합니다. 자세한 내용은 "병합 충돌 정보"을(를) 참조하세요.
Tip
GitHub에서 충돌 편집기를 사용하여 끌어오기 요청의 일부인 분기 간에 경쟁하는 줄 변경 병합 충돌을 해결할 수 있습니다. 자세한 내용은 "GitHub에서 병합 충돌 해결"을(를) 참조하세요.
경쟁하는 줄 변경 병합 충돌
경쟁하는 줄 변경으로 인한 병합 충돌을 해결하려면 새 커밋의 다른 분기에서 통합할 변경 내용을 선택해야 합니다.
예를 들어 사용자와 다른 사용자가 동일한 Git 리포지토리의 다른 분기에 있는 동일한 줄에서 styleguide.md
파일을 편집한 경우 이러한 분기를 병합하려고 할 때 병합 충돌 오류가 발생합니다. 이러한 분기를 병합하려면 먼저 이 병합 충돌을 새 커밋으로 해결해야 합니다.
-
Terminal(터미널)Terminal(터미널)Git Bash를 엽니다.
-
병합 충돌이 있는 로컬 Git 리포지토리로 이동합니다.
cd REPOSITORY-NAME
-
병합 충돌의 영향을 받는 파일 목록을 생성합니다. 이 예제에서 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")
-
Visual Studio Code과(와) 같이 즐겨 사용하는 텍스트 편집기를 열고 병합 충돌이 있는 파일로 이동합니다.
-
파일에서 병합 충돌의 시작을 보려면 충돌 표식
<<<<<<<
에 대해 파일을 검색하세요. 텍스트 편집기에서 파일을 열면<<<<<<< HEAD
줄 뒤에 헤드 또는 베이스 분기의 변경 내용이 표시됩니다. 다음으로 변경 내용을 다른 분기의 변경 내용과 구분하는=======
이 표시되고 그 뒤에>>>>>>> BRANCH-NAME
이 표시됩니다. 이 예제에서 한 사람은 베이스 또는 헤드 분기에 “문제 열기”라고 썼고 다른 사람은 비교 분기 또는branch-a
에 “IRC에 질문하기”를 썼습니다.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
분기의 변경 내용만 유지하거나, 다른 분기의 변경 내용만 유지하거나, 두 분기의 변경 내용을 통합할 수 있는 완전히 새로운 변경을 수행할지 결정합니다. 충돌 표식
<<<<<<<
,=======
,>>>>>>>
를 삭제하고 최종 병합에서 원하는 대로 변경합니다. 이 예제에서 두 변경 내용 모두 최종 병합에 통합됩니다.If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
-
변경 내용을 추가하거나 스테이징합니다.
git add .
-
주석을 사용하여 변경 내용을 커밋합니다.
git commit -m "Resolve merge conflict by incorporating both suggestions"
이제 명령줄에서 분기를 병합하거나 GitHub에서 원격 리포지토리에 변경 내용을 푸시하고 끌어오기 요청에 변경 내용을 병합할 수 있습니다.
파일 병합 충돌 제거됨
한 분기에서 파일을 삭제하고 다른 사용자가 동일한 파일을 편집하는 파일의 경쟁하는 변경으로 인해 발생하는 병합 충돌을 해결하려면 제거된 파일을 새 커밋에서 삭제할지 또는 유지할지를 선택해야 합니다.
예를 들어 _README.md_와 같은 파일을 편집하고 다른 사용자가 동일한 Git 리포지토리의 다른 분기에서 동일한 파일을 제거한 경우 이러한 분기를 병합하려고 할 때 병합 충돌 오류가 발생합니다. 이러한 분기를 병합하려면 먼저 이 병합 충돌을 새 커밋으로 해결해야 합니다.
-
Terminal(터미널)Terminal(터미널)Git Bash를 엽니다.
-
병합 충돌이 있는 로컬 Git 리포지토리로 이동합니다.
cd REPOSITORY-NAME
-
병합 충돌의 영향을 받는 파일 목록을 생성합니다. 이 예제에서 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")
-
Visual Studio Code과(와) 같이 즐겨 사용하는 텍스트 편집기를 열고 병합 충돌이 있는 파일로 이동합니다.
-
제거된 파일을 유지할지 결정합니다. 텍스트 편집기에서 제거된 파일에 대한 최신 변경 내용을 볼 수 있습니다.
제거된 파일을 리포지토리에 다시 추가하려면 다음을 수행합니다.
git add README.md
리포지토리에서 이 파일을 제거하려면 다음을 수행합니다.
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
주석을 사용하여 변경 내용을 커밋합니다.
$ git commit -m "Resolve merge conflict by keeping README.md file" > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
이제 명령줄에서 분기를 병합하거나 GitHub에서 원격 리포지토리에 변경 내용을 푸시하고 끌어오기 요청에 변경 내용을 병합할 수 있습니다.