WEBBOOK CHAPTER

현장에서 살아남는 Git: 14장 충돌은 기호를 지우는 일이 아니라 의도를 합치는 일이다

14장 충돌은 기호를 지우는 일이 아니라 의도를 합치는 일이다

충돌은 Git이 자동 선택을 못 했다는 뜻이지 누군가 잘못했다는 판결이 아니다. 먼저 merge 중인지 rebase 중인지 확인한다.


git status
git diff --name-only --diff-filter=U

파일의 <<<<<<<, =======, >>>>>>>는 두 후보 경계다. 경계만 삭제하고 양쪽 내용을 무조건 붙이면 문법은 통과해도 의미가 깨질 수 있다. 요구사항, 테스트, 작성자 의도를 보고 최종 결과 한 개를 만든다.


# 파일 수정 후
git add <해결한-파일>
git diff --check
git status
git merge --continue    # merge 중일 때
# 또는 git rebase --continue

SourceTree의 외부/내장 merge 도구나 IntelliJ의 3-way merge 화면도 공통 조상, 현재 쪽, 들어오는 쪽을 보여 준다. “Accept yours/theirs”는 rebase에서 직관과 다르게 느껴질 수 있다. 버튼 이름만 믿지 말고 결과 pane을 읽고 테스트한다.

재현 실습


npm run lab:setup
cd sandbox/releasedesk
git switch -c conflict/a main
printf '담당: 민지n' >> notes/v1.md
git add notes/v1.md && git commit -m "docs: 담당자 민지 지정"
git switch main
printf '담당: 준호n' >> notes/v1.md
git add notes/v1.md && git commit -m "docs: 담당자 준호 지정"
git merge conflict/a

한 사람을 고르는 문제가 아니라 공동 담당 규칙을 정해야 할 수도 있다. 최종 문장을 직접 만들고 커밋하라. 다시 시작하려면 git merge --abort 후 파일 상태를 확인한다.

4부 실수를 데이터 손실 없이 복구한다