git merge, rebase

Eamon·2022년 7월 31일
1

TIL

목록 보기
8/10

이 글은 뻔하디 뻔한 git merge 와 rebase 의 글이지만 저의 이해를 높히기 위해 적은 글입니다.

merge

Merge 란 브랜치를 통합하는 명령어 입니다.

어떤 브랜치에서 git merge “브랜치 이름” 을 명령하게 되면 현재 브랜치가 브랜치 이름을 가진 브랜치로 “병합" 되게 되는 겁니다.

머지에 방법은 두가지 가있는데

  1. fast-forward
  2. 3-way merge

첫번째로 fast-forward 는

현재 브랜치의 가장 최근 commit으로 master branch의 Head를 옮기는 것을 fast-forward라고 한다.

두번째로 3-way merge 는 대부분의 일반적인 머지의 방법이다.

내 브랜치는 master 브랜치에서 나왔지만 다른 사람들이 작업을 해서 master 브랜치의 header 가 달라졌다면 fast-forward 방식을 할 수 없다.

feature 브랜치와 main 브랜치의 header 가 다르지만 조상이 같을 때 인 경우인데

이경우에서는 아래와 같이 병합이된다.

병합되면서 새로운 커밋이 생성된다!

그렇다면 rebase 는 무엇인가.

rebase 는 브랜치가 나눠지기 전의 커밋으로 돌아가서 현재 브랜치와 머지할 브랜치의 diff 를 비교해가면서 업데이트를 하는 방식이다. . Rebase 할 브랜치가 합칠 브랜치가 가리키는 커밋을 가리키게 하고 아까 저장해 놓았던 변경사항을 차례대로 적용한다.

머지 할경우 fast-forward 머지를 할 수 있으므로 머지 커밋이 남지 않는다.

header 가 다를 때 어떤 게 더 좋을까?

나는 개인적으로 현재까진 merge 커밋을 더 선호한다. 그 이유는 rebase 를 진행할때 (diff 파일 / 충돌 파일 ) 이 많다면 diff 들을 비교해 가면서 이전 커밋부터의 여행이 쉽지 않고, 만약 diff 를 다르게 적용 시켰다면 다시 돌아가는게 호락호락하지 않기 때문이다.

그러나 merge 커밋이 생겨서 커밋로그가 더러워지는 것을 조금만 감수한다면 내가 잘못 머지했을 때도 머지 커밋 이전으로 혹은 머지커밋 시점으로 돌아갈 수 있어서 나에겐 더 안전한 방법 같다.

profile
Steadily , Daily, Academically, Socially semi-nerd Front Engineer.

0개의 댓글