git 충돌 문제 해결 방법
연결 문서
git 충돌 문제 해결 방법
Git에서 브랜치를 병합할 때 동일한 파일의 동일한 부분을 서로 다르게 수정했다면 병합 충돌이 발생합니다. 이러한 경우 개발자가 수동으로 충돌을 해결해야 합니다. 아래에서는 Python 코드를 예시로 들어 병합 충돌을 단계별로 해결하는 방법을 자세히 설명하겠습니다.
상황 설명
-
main
브랜치에서는calculator.py
파일에서add
함수가 다음과 같이 정의되어 있습니다:def add(a, b): return a + b
-
feature-multiply
브랜치에서는 동일한 파일에서add
함수 내부를 수정하여 로그를 추가했습니다:def add(a, b): print(f"Adding {a} and {b}") return a + b
병합 중 충돌 발생
feature-multiply
브랜치의 변경 사항을 main
브랜치에 병합하려고 하면 다음과 같은 충돌이 발생합니다.
git checkout main
git merge feature-multiply
출력 결과:
Auto-merging calculator.py
CONFLICT (content): Merge conflict in calculator.py
Automatic merge failed; fix conflicts and then commit the result.
단계별 충돌 해결 방법
단계 1: 충돌 파일 확인
충돌이 발생한 파일을 확인하기 위해 다음 명령어를 사용합니다:
git status
출력 결과:
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: calculator.py
여기서 calculator.py
파일에서 충돌이 발생했음을 알 수 있습니다.
단계 2: 충돌 내용 확인
편집기(예: VS Code, Vim, Nano 등)로 calculator.py
파일을 열어봅니다:
nano calculator.py
파일 내용은 다음과 같이 충돌 표시가 되어 있습니다:
def add(a, b):
<<<<<<< HEAD
return a + b
=======
print(f"Adding {a} and {b}")
return a + b
>>>>>>> feature-multiply
단계 3: 충돌 부분 분석
-
<<<<<<< HEAD
부터 ` ======= ` 사이의 코드는 현재 브랜치(main
브랜치)의 코드입니다. - ` ======= ` 부터
>>>>>>> feature-multiply
사이의 코드는 병합하려는 브랜치(feature-multiply
브랜치)의 코드입니다.
현재 브랜치(main
브랜치)의 코드:
def add(a, b):
return a + b
병합하려는 브랜치(feature-multiply
브랜치)의 코드:
def add(a, b):
print(f"Adding {a} and {b}")
return a + b
단계 4: 충돌 해결 방안 결정
어떤 코드를 유지할지, 또는 두 코드를 병합할지 결정해야 합니다.
옵션 1: 병합하려는 브랜치의 코드를 사용
feature-multiply
브랜치의 코드를 그대로 사용하고 싶다면:
def add(a, b):
print(f"Adding {a} and {b}")
return a + b
옵션 2: 현재 브랜치의 코드를 유지
main
브랜치의 코드를 유지하고 싶다면:
def add(a, b):
return a + b
옵션 3: 코드를 병합하여 새로운 기능 추가
두 코드를 조합하여 새로운 기능을 만들 수도 있습니다. 예를 들어 로그 기능을 옵션으로 제공:
def add(a, b, verbose=False):
if verbose:
print(f"Adding {a} and {b}")
return a + b
단계 5: 충돌 표식 제거 및 코드 수정
선택한 해결 방안에 따라 코드를 수정하고 충돌 표식 ( <<<<<<< , ======= , >>>>>>> )
을 제거합니다.
예시로 옵션 3을 선택했다고 가정하면, 수정된 코드는 다음과 같습니다:
def add(a, b, verbose=False):
if verbose:
print(f"Adding {a} and {b}")
return a + b
단계 6: 파일 저장
편집기에서 파일을 저장하고 닫습니다.
# Nano 편집기의 경우
Ctrl + O # 파일 저장
Enter # 파일명 확인
Ctrl + X # 편집기 종료
단계 7: 수정된 파일 스테이징
수정된 파일을 Git에 추가합니다:
git add calculator.py
단계 8: 병합 커밋 수행
병합을 완료하기 위해 커밋을 실행합니다:
git commit -m "Merge feature-multiply into main, resolved conflicts in calculator.py"
Git은 자동으로 병합 커밋 메시지를 제공하지만, -m
옵션을 사용하여 직접 메시지를 작성할 수 있습니다.
단계 9: 병합 확인
병합이 정상적으로 완료되었는지 로그를 확인합니다:
git log --oneline
출력 결과 예시:
3e4f5g6 Merge feature-multiply into main, resolved conflicts in calculator.py
1a2b3c4 Added multiply function in feature-multiply branch
...
추가 예시: 전체 과정 요약
-
병합 시도 중 충돌 발생
git checkout main git merge feature-multiply
-
충돌 파일 확인
git status
-
충돌 내용 확인 및 수정
-
calculator.py
파일을 열어 충돌 표식을 찾습니다. - 원하는 코드로 수정하고 충돌 표식을 제거합니다.
-
-
수정된 파일 스테이징
git add calculator.py
-
병합 커밋 수행
git commit
-
병합 완료 확인
git log --oneline
충돌 해결 시 주의 사항
- 충돌 표식 제거 필수: 충돌 표식이 남아 있으면 코드 실행 시 에러가 발생합니다.
- 코드 검토: 변경된 부분을 꼼꼼히 확인하여 논리적인 오류나 타이포가 없는지 확인합니다.
- 팀원과 협의: 충돌이 복잡하거나 중요한 기능과 관련된 경우 팀원들과 상의하여 최적의 해결 방안을 찾습니다.
시각적 도구 활용
충돌 해결을 도와주는 GUI 도구를 사용하면 더욱 편리합니다.
- VS Code: Git 확장 기능을 통해 충돌 부분을 시각적으로 보여줍니다.
- Sourcetree, GitKraken 등: 그래픽 인터페이스로 충돌 해결을 지원합니다.
요약
- 충돌 발생 시 Git은 충돌이 발생한 파일과 내용을 표시합니다.
- 개발자는 해당 파일을 열어 원하는 대로 코드를 수정하고 충돌 표식을 제거합니다.
- 수정된 파일을 스테이징하고 커밋하여 병합을 완료합니다.
- 필요에 따라 시각적 도구를 활용하여 충돌 해결을 용이하게 할 수 있습니다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: