Github pull request 시 merge 종류

viiviii·2021년 11월 14일
7

🙏 해당 포스팅에 사용된 손그림은 im-developer님의 포스팅에서 가져왔음 (직관적인 그림 감사드립니다 🙂)


깃헙에서 풀 리퀘스트 병합 시 선택할 수 있는 3가지 방식에 대해 간단히 정리해보자

Merge pull request

im-developer-merge-image

  • 작업 커밋(a, b, c) + merge 커밋(m)이 base branch에 추가됨

Github pull request 화면 이미지 - merge

pull request 하고 난 뒤 커밋 상태 이미지 - merge

  • commit id가 같음 (이미지에서 노란색 박스)

Squash and merge

im-developer-squash-and-merge-image

  • 전체 커밋을 1개의 커밋으로 묶어서 base branch에 병합됨
  • fast-forward 옵션을 사용해서 merge 됨

Github pull request 화면 이미지 - squash

pull request 하고 난 뒤 커밋 상태 이미지 - squash

💡 주의

pull request 이후에도 HEAD 브랜치에서 추가 작업을 해야 된다면 squash 병합은 추천하지 않음

Rebase and merge

im-developer-rebase-and-merge-image

  • 모든 작업 커밋이 merge 커밋 없이 개별적으로 base branch에 추가됨
  • 이때 기존 커밋이 아닌 새로운 커밋을 만들어서 추가

Github pull request 화면 이미지 - rebase

pull request 하고 난 뒤 커밋 상태 이미지 - rebase

  • 커밋이 새로 생성됐기 때문에 commit id가 다른 걸 확인할 수 있음 (이미지에서 노란색 박스)
  • 저장소의 Allow rebase merging 옵션이 켜져 있어야 함

참고

  • GitHubRebase and mergegit rebase살짝 차이가 있다고 함
  • git rebase는 ancestor 커밋에 rebase가 발생하면 committer 정보를 변경하지 않는다 함
    • committer == 커밋한 사람, != 작성자

전체 커밋 이미지

base branch의 전체 커밋 이미지


참고 링크

about pull requests - github docs
[Git] Merge 이해하기 (Merge / Squash and Merge / Rebase and Merge)

0개의 댓글