수달이네 기술 블로그

4. 브랜치 병합과 충돌 본문

학교공부/오픈소스SW

4. 브랜치 병합과 충돌

슬픈 수달이 2026. 4. 22. 18:47

브랜치(branch)

커밋들은 서로 연결되어 하나의 줄기(branch)를 이룬다

그러나 같은 원격저장소내 하나의 줄기에서 협업하면 자주 충돌이 발생한다.

  • 같은 라인을 수정하거나, 같은 파일을 수정할 경우

  • 충돌은 먼저 푸시한 커밋은 정상 반영되고, 늦게 푸시한 커밋에서 오류가 발생한다.

  • 이때 해당 작업을 여러 갈래로 나누어 각자의 줄기에서 작업해 충돌 걱정 없이 동시에 작업함.

브랜치란?

단순히 커밋 하나를 가리키는 포인터일 뿐이다.

  • 새 커밋을 생성하면 브랜치는 이동해 새로운 커밋을 가리킨다.
    • 이전에 체크아웃을 통해 이전 버전을 확인한 것은 커밋 아이디로브랜치를 바꿔주었기 때문이다.
  • 이때 새로운 브랜치를 생성하면, 같은 커밋을 가리키는 포인터가 하나 더 생긴다.
    • 이때 새로운 브랜치에 커밋하면 원래 master브랜치보다 하나 앞선다
    • 그리고 다시 master브랜치로 체크아웃해 커밋하면 브랜치가 나뉘는게 보인다.

git branch 브랜치명:브랜치를 생성하는 CLI

git checkout -b 브랜치명 : 브랜치명에 있는 브랜치를 새로 생성하고 체크아웃

병합

두 브랜치 버전의 합집합을 구하는 것.

빨리감기 병합

  • 한 브랜치와 다른 한 브랜치간에 버전차이(갈라짐이 없음)가 날때 병합하는 방식
    • merge commit없이 포인터만 밀어줄 뿐이라 충돌이 나지 않는다.

3-way병합

  • 두 브랜치가 분기(갈라짐)상태에서 병합을 해야하는 경우
    • 갈라진 기준이 되는 commit, branch1이 가리키는 commit, 2가 가리키는 commit 3가지를 기준으로 병합함.
    • 해당 병합에선 작업한 내용이 겹칠때 충돌이 발생할 수 있다.

기준 브랜치

  • 병합한 결과를 A브랜치나 B브랜치 어디에 반영할지를 결정한다.
    • 즉, A브랜치 기준으로 병합할 경우 A브랜치는 병합한 내용이 나타나고, B브랜치는 병합한 내용이 반영되지 않는다.

충돌

서로 다른 브랜치에서 동일한 부분을 다르게 수정한 후 병합을 시도할 때 충돌 발생

  • 같은 파일에서 같은 부분을 수정
  • 충돌이 일어났을 경우 해당 파일을 수정할 수 있다.

  • 위같은 상황에서 -====귀가 기준 브랜치, 아래가 합치려는 브랜치이다.
  • 수정이 완료되면 병합이 될 수 있다.

Pull Request(깃허브 내)

협업 상황에서 협력자에게 브랜치 병합을 요청하는 메세지를 보내는 것이다.

  • 내가 브랜치를 변경하고 깃허브에 푸쉬할 경우 pr을 보내는 메세지를 보낼 수 있음
  • pr을 보내면 해당 병합 내용을 원본을 가진 개발자가 병합할 수 있다.
  • base: master, compare: branch1
    • 기준이 되는 브랜치가 master, 내가 작업하는 브랜치가 compare에 올라간다.
  • pr도 메세지를 같이 만들 수 있다.

pr을 받을경우

  • 받으면 3-way commit상황처럼 병합커밋을 만들 수 있는 입력창이 보이게 된다.

패치

패치는 Git에서 새로운 이력을 업데이트 하는 명령이다.

  • Pull은 실제 로컬 저장소에 코드를 내려 받지만
  • Patch는 그래프만 업데이트 한다.