git merge, rebase

dongwon·2022년 1월 19일
1

TIL

목록 보기
17/17

git merge, rebase

브랜치를 다른 브랜치와 합치는 방법인 merge와 rebase에 대해 정리했습니다.

병합 방식

먼저 스터디 시나리오를 준비했습니다.

  1. 스터디장이 레파지토리를 만들고 (첫 번째 커밋), 1주차 정리 글을 올리기 위해 week1 폴더를 생성하고(두 번째 커밋) push 한다. -main 브랜치
  2. 스터디원 A, B는 week1 폴더가 생성되는 시점에 각자 브랜치(A, B 브랜치)를 생성해 정리 글을 올리고 PR을 올린다.
  3. 각자 발표를 마치고 스터디장이 2개의 PR 하나하나를 병합한다.

2번까지의 시나리오대로 git graph를 그리면 다음과 같습니다.

merge

위의 상태에서 merge 방식을 이용해 A, B 브랜치를 차례로 합친다면 다음과 같이 git graph가 그려집니다.

각자 다른 환경에서 작업해 충돌이 나지 않는다고 가정합니다.

이 그래프를 분석해 보면 먼저 A 브랜치의 PR #1을 merge 하면서 Merge pull request #1 commit이 생성하게 되고, 그다음 B 브랜치의 PR #2를 merge 하면서 Merge pull request #1 commit이 발생하게 되면서 합쳐집니다.

merge 장점

  1. git tree가 유지되어 어떤 브랜치에서 어떤 커밋을 했는지 알 수 있습니다.
  2. 원본 브랜치의 커밋들이 변경되지 않습니다. ( rebase 방식과의 차이점 )

merge 단점

  1. merge 할 때마다 merge PR 커밋이 생성됩니다.
  2. 여러 사람이 작업한다면 커밋 히스토리가 너무 복잡할 수 있습니다.

rebase

2번 git graph 상태에서 A, B 브랜치를 합치기 전에, A 브랜치에서 추가로 edit commit을 추가합니다.

A 브랜치를 main 브랜치에 합칩니다. 이때 기존의 A 브랜치는 사라지고 기존의 main 브랜치에 일렬로 정렬되고 merge PR commit도 발생하지 않습니다.

이제 B 브랜치에서 main 브랜치를 rebase 합니다. 이때 B 브랜치는 초기에 브랜치를 생성했던 main 브랜치의 2번째 커밋이 아닌 합쳐진 A 브랜치의 마지막 커밋 다음으로 이동하게 됩니다. 따라서 B 브랜치는 원본 브랜치에 A 브랜치의 커밋들까지 가지고 있게 됩니다.

마지막으로 B 브랜치를 main 브랜치에 합칩니다. 최종적으로 기존의 브랜치들은 모두 사라지고 git tree가 일렬로 정렬됩니다.

rebase 장점

  1. git tree가 일렬로 정렬되어 히스토리 관리가 편리합니다.
  2. 여러 개발자가 협업할 때 커밋을 합치는데 가장 직관적이고 깔끔합니다.

rebase 단점

  1. conflict 났을 때 conflict난 모든 커밋마다 수정을 해야 합니다.
profile
데이원컴퍼니 프론트엔드 개발자입니다.

0개의 댓글