[Git] Git merge 전략

jjuya·2020년 3월 7일
0

Create a merge commit(Merge commit)

보통 일반적으로 알고 있는 머지 전략이다. 이 방법은 머지 브랜치가 삭제되더라도 히스토리 그래프 상에는 다른 가지로 남아있다.'어떤 브랜치에서 어떤 커밋이 진행되어 어떻게 머지 되었군'을 자세하게 알 수 있는 히스토리가 남는다. 머지가 수행되면 머지커밋(merge commit)이 생긴다. 이는 '어느 순간에 어떤 브랜치의 변경 사항이 머지되었다.'를 알려준다. 다만 브랜치의 개수가 많아지거나 머지 횟수가 많아지면 히스토리 그래프의 가독성이 떨어진다.

Squash and merge(Squash)

여기서 squash는 여러 개의 커밋을 하나로 합치는 기능을 말한다. 이 전략은 머지 브랜치의 커밋을 전부 하나의 커밋으로 합친 뒤 타겟 브랜치에 커밋하는 방식으로 머지가 진행된다. 여기서 발생하는 머지 커밋은 실질적인 머지로 생긴 것이 아니라, 머지 브랜치의 변경 사항을 하나로 뭉친 변경 사항에 대한 커밋이다. 그렇기 때문에 머지 브랜치의 가지가 타겟 브랜치로 들아가는 것이 아니라 타켓 브랜치에 새로운 커밋이 추가된 모습으로 히스토리 그래프에 나타난다.

히스토리 상에서 알아보기 쉽고, 버전 별로 어떤 것이 변경되었는지 쉽게 알 수 있다. 그리고 머지 브랜치의 자잘한 커밋이 남지 않기 때문에 '머지 되었다.'라는 것에 집중하기 때문에 변경 사항을 읽기 수월하다. 하지만 일반 적인 머지 커밋보다는 정보력이 떨어진다. 어떤 커밋을 통해 어떤 부분을 수정했는지는 알 수 없다.

Rebase and merge(Fast forward)

rebase는 브랜치의 히스토리들의 베이스를 변경하는 방법이다. 이를 이용하여 브랜치를 머지하는 전략이다. 누가 언제, 어떤 부분을 수정했는지 머지 브랜치의 커밋을 모두 살려놓는다. 하지만 어느 시점에 머지 되었는지 알 수 없다. 이를 해결하기 위해 tag기능을 사용한다.

머지 시 충돌이 날 경우 각각의 커밋에 대해 충돌이 발생한다. 그 이유는 머지 브랜치의 히스토리 자체를 복사해서 타켓 브랜치에 박아버리는 방식이기 떄문이다.

profile
내가 공부하기 위해 시작한 velog

0개의 댓글