본문 바로가기
개발/Git & GitHub

Git Branch Merge 다양한 방법들( fast forward merge, rebase merge, squash merge ) 및 Branch 삭제방법

by ▩▦▤▧▩▥ 2023. 5. 27.
반응형

지난 글에서는 Branch를 생성하고 합치는 방법에 대해서 간략하게 알아보았습니다. 이번 글에서는 좀 더 심도 있게 Branch Merge를 할 수 있는 여러 방법들에 대해서 알아보고 필요 없어진 Branch를 삭제하는 방법에 대해서도 알아보도록 하겠습니다. 

 

 

목차
1. Branch Merge 다양한 방법들
- fast forward merge
- rebase & merge
- squash merge
2. Branch 삭제

 

 

1. Branch Merge 다양한 방법들

지난 글에서 Branch 생성 및 Merge 하는 방법에 대해서 알아보았습니다. 지난 글에서 알아보았던 Merge는 일반적으로 가장 많이 사용되는 3 way merge였습니다. 하지만 이것 말고도 Branch Merge 방법에는 여러 가지가 있는데요. 한번 차근차근 알아보도록 하겠습니다.

 

Fast Forward Merge

우선 처음으로 알아볼 Merge 방법은 Fast Forward Merge입니다. Fast Forward Merge가 되는 상황은 아주 간단한데요. 만약 새로 Branch를 만들고 새로운 Branch에서만 commit을 하고 Main Branch에서 commit을 하지 않은 상태일 때, Merge를 진행하면 새로운 Branch를 Main Branch로 지칭해 주는 것을 Fast Forward Merge라고 합니다. Branch를 만들고 다른 Branch에서 작업이 진행되지 않았다면, 새로운 Branch가 Main Branch가 되어도 문제가 없는 거니까요.

Fast Forward Merge의 조건
Main Branch : 신규로 작업을 진행하지 않음.
신규 Branch : 신규 Branch에서만 작업 및 commit.

 

vscode 터미널 화면

 

 

알아두기

만약 Fast Forward Merge가 싫으면 아래와 같이 터미널에 입력하면 됩니다.

git merge --no--off 브랜치명

그러면 우리가 하는 일반적인 3 way merge가 진행됩니다.

 

 

Rebase & Merge

이번에 알아볼 Merge 방법은 Rebase후에 Merge를 진행하는 방법에 대해서 알아보겠습니다. Rebase는 쉽게 생각해서 Branch의 시작점을 변경하는 것입니다. 일반적으로 Branch 후에 Main Branch와 신규 Branch에서 각각 작업을 한 후 Merge를 진행하면 3 way merge가 진행됩니다. 그런데 Rebase를 진행하게 되면, 신규 Branch의 시작된 지점이 기존 위치가 아닌 최신 Main Branch가 commit 된 지점으로 이동하게 됩니다. 그런 상태에서 Merge를 진행하여 Fast Forward Merge를 진행하는 것입니다.

 

아래 사진으로 간단하게 이해를 해 보죠.

커밋을 도형화한 사진

 

위에 사진에서 보면 신규 Branch의 시작점은 commit2부터입니다. 그런데 rebase를 통해서 시작점을 commit3으로 변경하는 것이죠.

 

 

아래 사진을 보면 Rebase 전의 Branch 시작점이 CSS 신규수정인 것을 확인할 수 있습니다.

vscode 화면

 

Rebase를 진행하게 되면 아래와 같이 시작점이 main html 수정으로 변경되는 것을 확인할 수 있습니다.

vscode 화면

 

 

Rebase and Merge 하는 방법

1. 신규 브랜치로 이동합니다.

2. 터미널에 git rebase main 입력합니다.

3. Branch 시작점이 변경되면서 자동으로 Fast Forward Merge가 된 것처럼 보입니다.

git switch 신규브랜치명
git rebase main

git switch main
git merge 신규브랜치명

 

 

번거롭게 이렇게 왜 하는 거죠?

Git History랑 Git Log보기 편하라고 하는 겁니다. 그리고 협업할 때 팀마다 Branch Merge 가이드가 있을 텐데, 그거 따라가려면 알고 있어야겠죠. 나중에 3 way merge 계속하다 보면 로그 보기 힘듭니다.

 

 

Squash Merge

이번에 알아볼 Merge방법은 Squash Merge이다. 이것도 목적은 Main Branch이 복잡하지 않게 하려는 이유에서 이다. 간단하게 설명하면 신규 브런치에서 특정 기능들을 작업하고 머지를 할 때 기존 커밋들의 로그들을 하나로 합쳐서 머지하는 거라고 할 수 있다. 그렇게 되면 Main Branch 로그를 볼 때 쓸데없는 로그들을 보지 않아도 되기 때문에 편하다. 보통 특정 기능 구현하고 Dev에 머지할 때 주로 사용한다. 뭐 회사에 들어가게 되면 팀에서 가이드 줄 테니 그거에 맞게 하면 된다. 사용해 보면 느낌은 Rebase랑 별 차이가 없게 느껴질 수도 있다.

 

Squash Merge 하는 방법은 터미널에 아래와 같이 입력하면 된다.

git switch main
git merge --squash 브랜치명
git commit -m '메시지'

 

 

2. Branch 삭제

Branch Merge를 진행해도 해당 Branch들이 삭제되거나 하지 않습니다. 우리가 삭제를 하지 않으면 계속 남아있게 되죠. 사용 다한 Branch들은 삭제해 주시는 게 좋습니다. 

 

Merge가 완료된 브랜치 삭제

Merge가 완료된 브랜치를 삭제하기 위해서는 터미널에 아래와 같이 입력해 주시면 됩니다.

git branch -d 브랜치명

 

Merge를 진행하지 않은 브랜치 삭제

Merge를 하지 않은 브랜치를 삭제하기 위해서는 터미널에 아래와 같이 입력해 주세요.

git branch -D 브랜치명

 

 

이번 글에서는 여러 종류의 Branch Merge 방법과 Branch 삭제 방법에 대해서 알아보았습니다. 다음 글에서는 혹시 작업 중 이전 버전의 상태로 돌리는 방법에 대해서 알아보도록 하겠습니다.

 

Git에서 이전 상태로 되돌리는 방법 알아보기( git revert, reset, restore )

반응형

댓글