Git 기초 3. 다양한 merge 방법 (3-way, fast-forward, rebase)

INSHAKE·2023년 5월 13일
0

Git

목록 보기
3/3
post-thumbnail

1. 3-way merge

main branch와 신규 branch에 각각 새로운 commit이 있는 경우 각 commit을 합쳐주는데, 이걸 3-way merge라고 부릅니다.

2. fast-forward

간혹 main branch에서 신규 commit 없이 분기한 branch에서 merge 명령을 입력하면 새로운 commit이 생성되지 않고, 분기한 branch가 자동으로 main branch 가 된다.
이걸 fast-forward 라고 한다.

fast-forward가 싫다면, 'git merge --no-ff 브랜치명' 해서 강제로 3-way merge 할 수도 있습니다.

3. rebase and merge

위처럼 branch가 여러 갈래로 뻗어나간 뒤 최종적으로 하나의 commit으로 merge하고 싶은 경우가 있다. 이때, 두가지 선택지가 있는데, 아래의 이미지를 참고해보자.

Option 1의 경우, 초록 commit과 노랑 commit을 merge한 뒤, 최종적으로 main branch에 merge하는 경우이다. 해당 과정상에 문제는 없지만, git log 상에서 분기가 많아지다보니 한 번에 알아보기 어려울 수 있다.

Option 2의 경우 rebase를 활용했다. rebase란, brnach의 base를 이동시킨다는 의미로, branch의 시작점을 다른 commit으로 옮겨주는 행위입니다.

  1. rebase를 이용해서 신규브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음
  2. fast-forward merge하는 것입니다.

그래서 실제로 rebase and merge 하고 싶으면

  1. 새로운 브랜치로 먼저 이동해서
  2. git rebase main 하면 됩니다.
  3. 그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 됩니다.

4. squash and merge

squash and merge 또한 rebase 와 비슷한 이유에서 씁니다. 이걸 쓰면git log를 볼 때 더 깔끔하게 볼 수 있는데, 결론만 얘기하면 선으로 이어주는게 아니라 순간이동을 시킨다고 보시면 됩니다.

3-way merge를 사용했을때, 이전 commit들의 내역이 모두 연결되어 있는것이 보이지만, squash and merge 를 활용하면 그것들을 모두 합쳐서 main branch에 붙여주기 때문에 그런 자잘한 commit들은 보이지 않습니다.

그렇기 때문에 이제 git log 출력해보면 깜끔해보입니다.

profile
꾸준함이 무기

0개의 댓글