티스토리 뷰

반응형

Git Merge와 Rebase의 차이, 아름다운고 깔끔한 Git History 만들기. 

0. 서론

 

그동안 git을 사용하면서 소수의 인원으로 같이 일할때는 push, pull, merge만 사용해도 큰 문제는 없었습니다.

git history도 손보지 않아도 될만큼 깔끔 했죠.

 

하지만 작년 하반기부터 새로운 팀에 합류하면서 8명의 개발자가 하나의 git 저장소를 보며 개발하게 되었습니다.

모두 push, pull, merge만 사용하다보니 git history도 엉망이 되어 가는 것을 볼 수 있었습니다.

 

그래서 내가 git 기능을 제대로 알지 못하고 간단한 것만 쓰고 있구나 하는 생각이 들었습니다.

그러다 찾아보니 Rebase 기능에 대해 알게 되었습니다.

 

이 포스팅은 Merge와 Rebase의 차이점을 정리하며 Rebase를 사용 했을때 어떤 효과가 있는지 알아보겠습니다.

 

1. Merge와 Reabse 차이.

 

Merge는 branch를 통합하는 것이고, Rebase는 branch의 base를 옮긴다는 개념의 차이가 있습니다.

두개의 개념의 차이는 확실히 다릅니다.

 

그래서 둘 중에 하나만 쓰는 것이 아니라 두가지가 존재 합니다.

 

1. Merge만 사용한다.

2. Rebase와 Merge를 사용한다.

 

"Merge는 알겠는데 Rebase가 뭐지"라고 생각하시는 분들이 많을 거라고 생각됩니다.

그럼 Rebase는 무엇일까요?

 

- Rebase

 

rebase는 사전 의미와 같이 base를 재설정한다는 의미 입니다.

여기서 말하는 base는 branch의 base를 의미 합니다.

branch는 base 지점을 가지고 있어 base에서부터 코드를 수정합니다.

git history를 살펴보면 branch의 base가 어디 있는지 확인 할 수 있습니다.

 

그렇다면 Rebase를 수행하면 어떻 효과가 있을까요?

 

  • B 지점을 base로 가진 branch가 D, E 커밋을 진행 한다.
  • C 지점으로 base를 이동하기 위해 branch에서 C 지점으로 rebase를 한다.
  • C 지점으로 rebase 되면 기존 D, E 커밋은 새롭게 정렬되어 C 지점 이후로 변경된다.

위 그림으로 Rebase를 설명할 수 있습니다.

설명 그대로 C 지점으로 base를 옮기고 기존에 있던 Commit을 재정렬하게 된다 입니다.

그러면 이렇게 진행 했을때 어떤 효과를 가져 올 수 있을지 궁금하실 겁니다.

 

위 그림을 보면서 느끼셨겠지만 Git History가 상당히 깔끔해집니다.

Git History를 정리하는 것은 개발자간의 배려라고 할 수 있습니다.

그 배려를 실천 하는 것이 바로 Rebase라는 것이죠.

 

Rebase의 설명은 여기까지 하고 실제 Merge만 했을때와 Rebase를 같이 진행 했을때

실제 Git History를 살펴 보겠습니다.

 

2. Rebase를 사용 했을때 git History로 보이는 효과 확인

 

Rebase의 효과를 확인하기 위해 Merge만 했을때와 Rebase를 시도 했을때 차이점을 실습을 통해 설명 드리겠습니다.

 

branch1과 branch2를 dev branch에서 생성한 뒤 각각 Commit 1, 2, 3을 하였습니다.

이 상태에서 dev 브랜치에 branch1과 branch2 두개를 dev에 반영해보겠습니다.

 

1) merge만 사용하여 dev에 반영 했을 때.

1-1) merge dev from branch1

 

barnch1을 dev로 merge 했을때 git history

Commit 1이 dev로 merge 된 것을 확인 할 수 있습니다.

history 상태에서는 Commit2, Commit3는 history가 뒤로 보이는 것을 확인 할 수 있습니다.

 

1-2) merge dev from branch 2

 

branch1과 branch2를 dev로 각각 merge 했을때 git history

 

merge만으로 dev에 코드를 추가 하게 되면 히스토리가 위와 같이 생성됩니다.

서로 엮이지 않는 branch가 각각 dev에 merge가 진행되는 모습으로 서로 엉키게 됩니다.

 

예를 들때는 branch가 2개 일때를 가정하였지만 개발자가 늘어나면 branch도 많아지게 됩니다.

또한, 각각의 branch들이 서로 엉키는 모습이 상당히 심해지죠.

이러한 branch들이 엉키는 git history를 깔끔하게 해주는 방법이 rebase 입니다.

 

2) merge와 rebase를 사용하여 dev에 반영 했을 때

2-1) merge dev from branch1

barnch1을 dev로 merge 했을때 git history

2-2) rabase dev into branch2

 

branch1이 merge된 dev branch를 branch2에 rebase 해보겠습니다.

 

dev를 branch2로 rebase 시켰을때 git history

rebase를 하게 되면 git history를 commit이 재정렬 됩니다.

마치 branch1이 dev에 merge 된 후 branch를 새로 딴 것 처럼 commit 내용들이 정렬되죠.

 

2-3) merge dev from branch2

 

그럼 이상태에서 branch2를 dev에 merge 해보겠습니다.

 

branch2를 dev로 merge 했을때 git history

branch2를 dev에 merge 하면 위와 같이 깔끔한 git History를 확인 할 수 있습니다.

개발자가 여러명이라도 순서대로 commit 한 것과 같은 git history를 만들 수 있습니다.

반응형

'Git' 카테고리의 다른 글

Squash 사용법 - Git Commit 합치는 방법.  (0) 2020.01.22
댓글