dev.syw

머지 충돌이 나는 이유와 해결 절차를 익히고 git rebase의 기초와 merge와의 차이를 이해한다.

충돌 해결과 리베이스

여러 사람이 같은 파일의 같은 부분을 다르게 고치면 충돌(conflict) 이 납니다. 충돌은 오류가 아니라, Git이 "어느 쪽이 맞는지 모르겠으니 네가 정해라"라고 묻는 것입니다. 충돌 해결과 함께 이력을 정리하는 리베이스를 배웁니다.

학습 목표

  • 머지 충돌이 나는 이유를 안다.
  • 충돌을 해결하는 절차를 따라 한다.
  • git rebase 기초를 이해한다.
  • merge와 rebase의 차이를 구분한다.

충돌이 나는 이유

Git은 대개 변경을 자동으로 합칩니다. 하지만 두 브랜치가 같은 파일의 같은 줄을 서로 다르게 바꿨다면 자동으로 판단할 수 없어 충돌이 발생합니다.

git switch main
git merge feature/login
# CONFLICT (content): Merge conflict in index.html
# Automatic merge failed; fix conflicts and then commit the result.

충돌 해결 절차

  1. git status로 충돌 난 파일을 확인합니다.
git status
# both modified:   index.html
  1. 충돌 파일을 열면 Git이 양쪽 내용을 표시해 둡니다.
<<<<<<< HEAD
<h1>현재 브랜치(main)의 내용</h1>
=======
<h1>합치려는 브랜치(feature)의 내용</h1>
>>>>>>> feature/login
  • <<<<<<< HEAD ~ ======= : 현재 브랜치의 내용
  • ======= ~ >>>>>>> feature/login : 합치려는 브랜치의 내용
  1. 직접 편집해 최종적으로 원하는 코드만 남깁니다. <<<<<<<, =======, >>>>>>> 표시줄은 모두 지웁니다.
<h1>최종으로 결정한 내용</h1>
HTML
  1. 해결한 파일을 스테이징하고 커밋해 머지를 마무리합니다.
git add index.html
git commit            # 머지 커밋 완성 (메시지는 보통 자동 생성)

머지를 중단하고 처음 상태로 돌아가려면

git merge --abort

git rebase 기초

merge가 두 갈래를 합치는 머지 커밋을 만든다면, rebase는 한 브랜치의 커밋들을 다른 브랜치 끝으로 옮겨 다시 쌓아 일직선 이력을 만듭니다.

git switch feature/login
git rebase main      # feature 의 커밋들을 최신 main 위로 다시 올림
merge 결과:                    rebase 결과:
main ●──●──◆ (머지 커밋)        main ●──●──●'──●'
        \  /                          (feature 가 main 뒤로 일직선)
feature  ●●

리베이스 중에도 충돌이 날 수 있는데, 위와 같은 방식으로 해결한 뒤 다음으로 진행합니다.

git add <파일>
git rebase --continue   # 다음 커밋으로 진행
git rebase --abort      # 리베이스 취소

⚠️ rebase는 커밋 해시를 새로 만들며 이력을 바꿉니다. 이미 push해서 남과 공유한 커밋은 rebase하지 마세요. 협업자의 이력과 어긋납니다.

merge vs rebase

mergerebase
이력 모양갈래가 보이는 그래프일직선
머지 커밋생김없음(깔끔)
원본 커밋보존새로 다시 만듦
공유된 커밋에 사용안전위험

정해진 정답은 없습니다. 협업 이력을 그대로 남기고 싶으면 merge, 로컬에서 내 브랜치를 깔끔히 정리해 PR을 올리고 싶으면 rebase를 쓰는 식으로 팀 규칙을 따릅니다.

요약

충돌은 같은 줄을 다르게 고쳤을 때 나며, 충돌 표시(<<<<<<<)를 직접 정리한 뒤 addcommit으로 마무리합니다. rebase는 커밋을 다시 쌓아 일직선 이력을 만들지만, 공유된 커밋에는 쓰지 않습니다. 다음 강좌에서는 GitHub로 협업하는 흐름을 배웁니다.

함께 보면 좋은 자료

📚 레퍼런스

댓글 0

Git & GitHub강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.