🤔 포스팅 계기
Git을 배우면서 커밋 히스토리의 편의성과 중요성을 느끼고 있는 요즘, 기본적인 Merge 사용법은 알지만 그 외 다양한 merge 방법에 대한 이해도는 부족하다는 것을 느꼈다. 다양한 merge 방법을 이해하고 추후 깔끔하고 체계적인 커밋 히스토리 관리를 위해 포스팅하게 되었다.
🔍 Merge란?
우선 세 가지 merge 전략을 알아보기 전,
merge란 git branch를 다른 branch로 합치는 과정을 말한다.
merge에도 세 가지의 방법이 있다.
- Merge
- Rebase and Merge
- Squash and Merge
위 세 가지 방법 모두 두 개의 브랜치를 머지한다는 결과는 같지만, 머지하는 방법과 커밋 히스토리를 기록하는 방법은 다르다.
1. Merge
$ git checkout main
$ git merge my-branch
가장 기본적인 방법으로, 각각의 브랜치에 남은 커밋을 히스토리에 그대로 남긴다.
또한 merge 시 merge commit이 새로 생긴다는 특징이 있다.
이러한 특징 떄문에 merge 시점을 확실히 알 수 있다는 장점은 있지만 불필요한 commit 내역이 생겨 커밋 히스토리가 지저분해질 수 있다는 단점이 있다. (오타 수정과 같은 자잘한 커밋도 모두 남는 경우를 생각해보자.)
2. Squash & Merge
$ git checkout main
$ git merge --squash my-branch
$ git commit -m "squash & merge"
squash는 여러 개의 커밋을 하나의 커밋으로 합치는 것을 의미한다.
병합할 브랜치의 모든 커밋을 합쳐 새로운 하나의 커밋으로 만들어 새로운 커밋을 base 브랜치에 추가하는 방식이다.
squash도 merge commit이 남기 때문에 머지 시점을 알 순 있지만 자세한 커밋 사항은 남지않는다는 것을 주의해야 한다. (오타 수정 등 자잘한 커밋 사항등을 합칠 때 쓰일 수 있을 거 같다.)
3. Rebase & Merge
$ git checkout my-branch
$ git rebase main
$ git checkout main
$ git merge my-branch
rebase란 분기된 시점의 commit이 아닌 base 브랜치의 최신 commit 으로 base를 옮기는 작업을 말한다.
이름에서 알 수 있듯 다시 base를 설정하는 것이다.
base 브랜치의 최신 변경사항을 즉각 반영할 수 있으며 merge commit 이력이 남지 않아 깔끔한 커밋 히스토리를 유지할 수 있다. 반면 어느 시점에 merge가 되었는지 파악하기 어렵기 때문에 주의해야 한다.
'ETC > Git' 카테고리의 다른 글
[Git] Git Flow 브랜치 전략 (0) | 2024.03.22 |
---|