[Github] Merge란?

이지민·2025년 10월 23일

깃허브

목록 보기
11/13

1. Merge(병합)의 개념

  • merge : 서로 다른 브랜치를 하나의 브랜치로 합치는 과정
  • conflict(충돌)는 왜 발생하는가?
    • 서로 다른 브랜치의 같은 파일의 같은 라인이 서로 다르기 때문
    • Conflict가 발생하는 경우, git은 자동으로 해결해주지 못함.
      개발자가 직접 수정한 뒤, 수정한 내용을 커밋으로 반영해줘야 함.

  • conflict는 어떻게 해결해야 하는가?
    • conflict가 발생한 부분에서 원하는 코드만을 남기고 저장한 뒤, 다시 커밋을 생성해주면 conflict 해결 완료!
      • 원하는 코드만을 남기고 저장
      • git addgit commit으로 새로운 커밋 생성

  • vscode의 git 관련 extension은 conflict 해결 기능을 보다 간편한 방식으로 제공하는 경우(Accept Current Change, Accept Incoming Change 등등…)도 있으니 CLI, GUI 방식 둘 다 써보고 더 편한 방법을 사용하면 된다.



2. 다양한 Merge 방법

3-way merge

  • 가장 기본적인 merge의 동작 방식
  • 각 브랜치에 신규 커밋이 1개 이상 있는 경우, 3-way merge 방식으로 브랜치가 병합됨

fast-forward merge

  • 병합의 기준이 되는 브랜치(여기서는 main 브랜치)에 신규 커밋이 없고
    병합하려는 브랜치(여기서는 new 브랜치)는 신규 커밋이 1개 이상 존재하는 경우, fast-forward merge 방식으로 병합된다.
  • fast-forward merge병합을 통해 다른 브랜치의 커밋을 기존 브랜치의 후속 커밋처럼 설정하는 방법

rebase & (fast-forward)merge

  • rebase: 브랜치의 시작점을 다른 커밋으로 옮겨주는 방법

  • rebase로 신규 브랜치의 시작점을 최근 커밋으로 옮김 → fast-forward로 병합

  • rebase를 왜 쓰나요?

    • 3-way merge는 병합할 때 병합 커밋이 남기 때문에 3-way merge를 남발하면 나중에 git log등의 명령어로 커밋 기록들을 조회할 때 매우 복잡함
  • rebase의 단점

    • 시작점을 최근 커밋으로 옮기기 때문에 충돌(conflict)가 발생할 수 있음.
  • rebase 예시

$ git switch(checkout) 새로운브랜치
$ git rebase main

$ git switch(checkout) main
$ git merge 새로운브랜치

squash & merge

  • 새 브랜치에 있는 커밋들을 하나로 합쳐서 기존 브랜치로 옮겨줌(병합)
  • squash & merge도 커밋의 시작점이 변경되기 때문에 conflict가 발생할 수 있음
  • squash & merge 예시
  $ git switch main
  $ git merge --squash 브랜치명
  $ git commit -m '메세지'



3. Pull & Request에 대한 설명

Pull Request에 대한 링크


인용 자료 출처
코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
(무료) 매우쉽게 알려주는 git & github
모두를 위한 깃&깃허브 by NomadCoders

profile
모든 것을 다 기억할 수는 없기에 기록합니다.

0개의 댓글