dev._.note

[Github] squash merge와 rebase merge 본문

Dev/환경설정

[Github] squash merge와 rebase merge

Laena 2024. 2. 29. 23:01

Pull request merge


Github 웹사이트에서 PR 요청을 승인해서 Merge하려고 할 때에, Github는 Merge에 대해 세 가지 선택지를 준다. 바로 Merge, Squash merge, Rebase merge이다.

 


Merge

Merge는 그냥 일반 Merge다. Branch와 Branch는 이어지고 Merge된 Repository의 History에서 어느 Branch에서 Merge되었는지, 이 Branch에서 어떤 Commit들이 있었는지 모두 볼 수 있다.

파란 게 develope branch고 노란 게 #8-Chat.vue/$socket.id branch다.
이 그래프는 develope에서 #8-Chat.vue/$socket.id을 merge했을 때의 그래프이다. #8-Chat.vue/$socket.id으로부터의 Pull request를 Merge했다는 설명이 명시되어 있고, branch도 이어져 있어서 그 사실을 직관적으로 알 수 있다.

  • 이 방식의 장점
    Git history에서 해당 Pull request에 대해 상세하게 확인할 수 있다.
  • 단점
    그러나 Branch가 많아지고, Commit도 많아지고 하면 Git history는 알아보기가 힘들어진다. 프로젝트의 규모가 크면 클 수록 이 방식은 선호되지 않는다.

Rebase merge

Rebase merge는 Merge할 Branch의 Commit 내역들을 그대로 옮긴다. Branch의 Base를 옮기는 일이니 말 그대로 Rebase다. 그래서 Branch는 이어지지 않는다.

초록색이 main, 분홍색이 1-Caht.vue/getCss다.
이 그래프는 main에서 1-Caht.vue/getCss의 Pull request를 Rebase and merge 했을 때의 그래프다.1-Caht.vue/getCss의 fix #1이라는 commit이 main의 fix #1 (#12)라는 이름의 commit으로 그대로 옮겨진 것이다. #1은 Issue link, (#12)는 Pull request의 번호다.
commit의 base를 1-Caht.vue/getCss에서 main으로 옮긴 것이기 때문에 branch는 이어져 있지 않다. 보통 이 이후에 rebase를 한 branch는 삭제해서 그래프를 깔끔하게 유지한다.

  • 이 방식의 장점
    Git history를 볼 때 깔끔하게 볼 수 있다. 여러 개의 Branch가 복잡하게 얽혀있지 않고 그냥 default branch 하나의 Histroy만 쭉 읽으면 해당 프로젝트의 이력을 이해할 수 있다.
  • 단점
    여러 개의 Commit을 Rebase merge했는데 Commit conflict가 일어나면 Merge하려는 모든 Commit에서 Conflict가 일어난다.
    또한 거미줄처럼 이어지는 Branch는 사라지지만, 여전히 의미가 없다시피 하는 Commit도 History에 남는다.

Squash merge

사실 Squash는 Rebase merge의 Option이다. Squash 옵션을 적용한 Rebase merge를 Squash merge라고 부르는 모양이다.

Squash merge는 Rebase하되 Merge할 Commit들을 하나의 Commit으로 뭉친다. Squash는 사전적 의미로 으깨다, 짓누르다 라는 뜻을 가지고 있다.


develope로부터 분기한 16-ChatUiImprove가 있다. 16-ChatUiImprove에는 2개의 commit이 있다. 여기서 Squash merge를 사용해보겠다.


16-ChatUiImprove의 Commit들이 하나로 합쳐진 다음 develope로 rebase되었다. 자잘한 CSS 변경, 오타 수정 같은 Commit까지 History에 남기지 않고 의미 있는 Commit들으로만 History를 유지할 수게 된다.

  • 이 방식의 장점
    Git history의 Branch도 깔끔하게 유지하되 자잘한 Commit들은 없애고 의미있는 Commit으로만 History를 이룰 수 있다.
  • 단점
    Merge에 대한 정보가 부족한 점이 단점

 

https://velog.io/@code-bebop/Github-merge-squash-merge-rebase-merge

'Dev > 환경설정' 카테고리의 다른 글

[Git] Git Stash 사용법  (0) 2024.03.12
[Audio Cutter] 오디오 길이 편집  (0) 2024.02.15
[GIT] Pull Request 방법 정리  (0) 2024.02.06
[Git] .gitignore 작성 정리  (0) 2024.01.26
Kingfisher 설치  (0) 2024.01.18