본문 바로가기
코딩 공부/Git

Git 충돌 해결하기(Merge Conflict)

by JH-M 2023. 5. 10.

Git에서 충돌이란?

Git에서 충돌이란 두 개발자가 동시에 같은 파일의 같은 부분을 수정하거나, 한 개발자가 다른 개발자의 변경 사항을 병합하려 할 때 발생하는 문제입니다. 이러한 충돌은 Git의 병합(Merge) 또는 리베이스(Rebase) 과정에서 발생할 수 있습니다.🤔

충돌 해결

  • 충돌이 발생한 파일을 열어서 충돌을 직접 수정합니다. Git은 충돌이 발생한 부분에 표시를 추가해 줍니다. (예: <<<<<<<, =======, >>>>>>>)
  • 수정한 후, 충돌이 발생한 파일을 스테이징하고 커밋합니다. 이렇게 하면 충돌이 해결된 것으로 간주됩니다.👍

충돌 최소화 방법

  • 작업을 시작하기 전에 최신 코드를 먼저 가져옵니다. (git pull)
  • 작업 내용을 더 작은 단위로 나누어 빈번하게 커밋합니다. 이렇게 하면 충돌이 발생할 확률을 줄일 수 있습니다.
  • 다른 개발자와 소통을 통해 작업 내용을 공유하고 충돌을 예방하는 방법을 찾습니다.🗣️
  • Git에서 제공하는 브랜치 기능을 활용하여, 각 기능별로 브랜치를 생성하고 작업합니다. 이렇게 하면 다른 작업과 충돌을 피할 수 있습니다.

충돌을 경험하는 것은 불가피하지만, 충돌을 해결하고 관리하는 방법을 익혀두면 팀 작업에서 더욱 효율적으로 코드를 관리할 수 있습니다. Git을 사용하여 충돌을 해결하고, 충돌을 최소화하기 위한 방법들을 적용하여 팀 작업에서 코드 품질을 높일 수 있습니다.

예제

Git 초기 프로젝트를 만들어서 코드 충돌을 체험하고, 충돌을 해결하는 방법을 시뮬레이션 해보겠습니다.

1. Git 초기 프로젝트 생성하기

로컬 컴퓨터에 Git이 설치되어 있는지 확인해야 합니다. 터미널에서 다음 명령어를 입력하여 Git의 버전을 확인하세요.

git --version

깃이 설치되어 있지 않았다면 Git 시작하기 - 기본 명령어 튜토리얼를 참고해 주세요.💡

이제 새로운 프로젝트를 시작하겠습니다. 터미널에서 원하는 디렉토리로 이동한 후, 다음 명령어를 입력하여 새 Git 저장소를 초기화합니다.

git init test
cd test

2. 첫 번째 파일 생성 및 커밋하기

먼저, 프로젝트 폴더에 test.txt 파일을 생성하겠습니다.

'echo [텍스트] > [파일]' 의 형식으로 간단하게 파일을 생성할 수 있습니다.📁

echo test > test.txt

이제 Git 저장소에 파일을 추가하고 커밋합니다.

git add test.txt
git commit -m "첫 커밋"

3. 브랜치 생성하기

현재상태로 side 브랜치를 생성만 하고 이동하지는 않습니다.

git branch side

4. 코드 충돌 준비하기

mainside 브랜치에서 각각 test.txt 파일을 수정해 보겠습니다.

먼저, main 브랜치에서 test.txt 파일에 내용을 추가해 주겠습니다.

'>>' 이 기호를 사용하면 파일의 마지막에 텍스트를 추가할 수 있습니다.📚

git checkout main
echo "메인에서 추가" >> test.txt

변경 사항을 커밋합니다.

git add test.txt
git commit -m "메인 작업"

이제, side 브랜치로 이동해서 test.txt 파일에 내용을 추가해 주겠습니다.

git checkout side
echo "사이드에서 추가" >> test.txt

변경 사항을 커밋합니다.

git add test.txt
git commit -m "사이드 작업"

5. 충돌 발생 및 해결

side 브랜치 작업을 병합해서 충돌을 발생 시키겠습니다.😨

main 브랜치로 돌아와서 merge를 진행합니다.

git checkout main
git merge side

다음과 같이, Conflict 충돌 에러가 발생한것을 확인할 수 있습니다.😱

<<<<<<<, =======, >>>>>>>는 Git에서 코드 충돌이 발생했을 때 충돌 부분을 표시하기 위한 특수 문자입니다. <<<<<<< HEAD는 충돌 시작 부분을 나타내며, HEAD는 현재 브랜치의 변경 사항을 의미합니다. =======는 두 변경 사항을 구분하는 구분자입니다. >>>>>>> [브랜치 이름 또는 커밋 해시]는 충돌 끝 부분을 나타내고, 병합하려는 다른 브랜치의 변경 사항을 표시합니다. 충돌을 해결하려면 두 브랜치의 작업 중 하나만 선택하거나 두 작업을 모두 선택하거나 수정할 수 있습니다. 수정한 후에 <<<<<<<, =======, >>>>>>> 기호를 제거하고 변경 사항을 커밋하여 충돌을 해결할 수 있습니다.

충돌 해결을 위해 다음과 같이 파일을 수정해주겠습니다.

변경사항을 커밋하고 충돌해결을 완료합니다.🎉

git add test.txt
git commit -m "충돌 해결"

마무리

지금까지 Git을 사용하여 코드 충돌을 체험하고, 충돌을 해결하는 방법에 대해 학습해보았습니다. 코드 충돌은 협업 과정에서 자주 마주치게 되는 도전이지만, 충돌 해결 및 관리 전략을 숙지하면 팀 작업에서 코드 관리를 더욱 효과적으로 수행할 수 있을 것입니다. 감사합니다.😊🙌

댓글