[Git] Merge에도 전략이 있다?! (Merge, Rebase, Squash 파헤치기)

송하연·2023년 12월 6일
3
post-thumbnail

Git에서 브랜치를 병합하는 대표적인 전략에는 Merge, Rebase Merge, Squash Merge 3가지가 있다.

Git에서 변경 사항이 생기면 Commit을 하게 되고, 이 때 커밋 히스토리가 발생하는데 효율적인 히스토리 관리를 위해서는 각 전략을 적절히 선택하는 것이 중요하다!

1. Merge

가장 기본적인 Merge로 하나의 브랜치와 다른 브랜치의 변경 이력을 합치는 방식이다.

git checkout main
git merge feature

위 그림과 같이 feature 브랜치에서 작업한 변경 사항 X,Y,Z를 main 브랜치로 병합 시 새로운 merge 커밋을 M을 만들며 두 브랜치가 합쳐진다.

  • feature브랜치가 삭제되어도 history에는 남아있다.
  • 불필요한 커밋 내역이 많아지면 history가 복잡해져 가독성이 떨어질 수 있다

2. Rebase Merge

하나의 브랜치의 base를 다른 브랜치의 최신 Commit으로 base로 옮겨서 Merge하는 방식이다.

git checkout feature
git rebase main //feature브랜치의 base가 main 브랜치의 최신 커밋으로 변경
git checkout main
git merge feature

기존 방식대로 feature 브랜치를 main 브랜치에 merge하면 분기점 A를 base로 하여 두 브랜치를 비교하게 된다.
Rebase Merge를 하게 될 경우 feature브랜치의 base를 A->C로 옮기고 Feature 브랜치에서 생성한 각각의 커밋 X,Y,Z를 main 브랜치의 C 지점 이후에 재정렬하게 된다.

  • Merge 커밋이 생기지 않아 커밋 히스토리를 하나의 브랜치에서 작업한 거 처럼 단순하게 유지할 수 있다.
  • Merge 커밋이 남지 않아 언제 병합되었는지 알 수 없다

3. Squash Merge

여러 커밋을 하나의 커밋으로 합친 후 Merge하는 방식이다.

git checkout main
git merge --squash feature 
git commit -m "squash merge"

Feature 브랜치에서 생성한 각각의 커밋 X,Y,Z를 합친 하나의 커밋 X'Y'Z'커밋을 생성한 후 main 브랜치에 병합한다.

  • 브랜치의 모든 변경 사항을 단일의 커밋으로 통합하여 커밋 히스토리를 보다 간결하게 관리할 수 있다.

정리

Merge | 하나의 브랜치와 다른 브랜치의 변경 이력을 Merge
Rebase Merge | 하나의 브랜치의 base를 다른 브랜치의 최신 Commit으로 base로 옮겨서 Merge
Squash Merge | 여러 커밋을 하나의 커밋으로 합친 후 Merge

profile
개발 기록 끄적끄적✏️ #백엔드개발자

0개의 댓글