[Git] branch merge 방법들과 각 방법의 특징

조영썬·2024년 9월 13일
0

branch merge란

하나의 branch를 이용하면 편리하지만, 정상 서비스 운영중인 main branch에서 새로운 기능 추가나 버그 수정을 할수없다.

그래서 해결방안으로 각각의 브랜치에서 개발한 후, 현재 브랜치를 다른 브랜치로 합칠 때 사용한다.
특정 브랜치로 합치게 해달라고 요청하는 pr(pull request)에도 세가지 merge 방법이있다.



Create a merge commit

일반적인 merge commit을 만들며, 각각 브랜치에 남은 커밋을 히스토리에 그대로 남겨서 상세한 작업파악이 가능하다.

모든 commit과 분기했던 브랜치 히스토리가 굉장히 자세히 남아서 다소 보기 어려울 수 있다는 단점이 있다.

명령어: git merge [머지할 브랜치]



Squash and merge


squash: 짓누르다, 으깨다

선택한 브랜치의 모든 커밋을 하나의 커밋으로 합쳐서 중앙 브랜치에 하나의 커밋으로 저장하는 전략이다.

앞선 Create a merge commit의 모든 기록이 남아 기존 변경사항들이 어떻게 변했는가를 집중적으로 보여주기 보다 merge 되었다에 집중해 commit 히스토리가 간결하다는 장점이 있다.

하지만, 개별 커밋들이 사라져서 언제 어떤 코드를 바꿨는지에 대한 정보를 잃을 수 있다는 단점이 있다.

명령어: git merge -squash[머지할 브랜치]



Rebase and merge

선택한 브랜치의 commit들이 main 브랜치 위로 위치를 직접 옮겨서 처리하는 방식이다.

다른 브랜치에서 변경한 내용을 main 브랜치에서 변경한 것처럼 바꿔서 병합 commit이 생성되지 않아 commit 히스토리가 깔끔하고 일직선으로 이어진다.
팀 내에서 병합 기록을 최소화하고자 할 때 유용하다.

하지만, merge commit 기록되지 않기에 어느 시점에서 merge 되었는지 판단하기 어렵고 충돌이 발생한다면 충돌 해결 과정이 복잡해질수 있다.

rebase는 다른 브랜치의 커밋을 가져와서 현재 브랜치 위에서 다시 적용할때 커밋 히스토리가 재작성되므로, 원래 커밋 순서가 변경된다.
또한 각 커밋을 차례대로 재적용하는 방식이기 때문에 중간 중간 커밋마다 충돌이 발생할 수 있는데 각 커밋의 충돌을 해결해야 하므로 시간이 오래 걸릴수 있다

명령어: git rebase -i HEAD~



(출처)
https://velog.io/@jeris/Git%EC%97%90%EC%84%9C-branch-merge-%EB%B0%A9%EB%B2%95%EB%93%A4%EA%B3%BC-%EA%B0%81-%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95


https://ssocoit.tistory.com/273

0개의 댓글