본문 바로가기
Language/Git

[Git] 3-way, fast-forward, squash, rebase / merge방법

by 애기 개발자 2022. 12. 9.
반응형

3-way merge

기존에 우리는 이미 배운 내용이다.

 

2022.11.18 - [Language/Git] - [Git] git에서 branch 만들기, git merge

 

[Git] git에서 branch 만들기, git merge

git branch coupon coupon이라는 이름의 branch를 생성 git switch coupon coupon사본이 있는 곳으로 이동 git status # On Branch coupon git status를 입력하면 현재 어떤 브런치에 위치하고 있는지 보여준다. git switch maste

baby-dev.tistory.com

 

위와 같이 기본적으로 우리가 배운 방법이며

 

기존 branch

새로운 branch

 

두 가지를 각각 합치는 방법이다.

 


fast-forward merge

기존의 branch를 버리고

 

새로운 branch만 commit 하는 방식이다.

 

 

fast-forward merge를 하는 방법은

 

기준이 되는 main branch에 신규 commit이 없으면 자동으로 fast-forward merge가 된다.

 

위의 방법이 싫으면

 

git merge --no-ff 브랜치명

위의 명령어를 입력하여 강제로 3-way merge 하는 방법도 있다.

 


branch 삭제

위의 방법을 사용할 때 3-way나 fast-forward 방식은 새로 만든 branch나 기존의 branch를 삭제하진 않는다.

 

git branch -d 브랜치이름
git branch -D 브랜치이름

-d와 -D는 차이가 있다.

 

-d : 병합이 완료된 branch 삭제할 때

-D : 병합하지 않은 branch 삭제할 때

 


 

rebase and merge

rebase란 브랜치의 시작점을 다른 commit으로 옮기는 것이다.

 

위의 방식을 하는 방법은

 

1. rebase를 이용해서 신규 branch의 시작점을 main branch의 최근 commit으로 옮긴다.

2. fast-forward merge를 한다.

 

이러한 rebase merge를 하는 이유는

 

3-way merge 가 아닌 강제로 fast-forward 하고 싶을 때 한다.

 

명령어로 하는 방법은

 

git switch 새로운브랜치
git rebase main

git switch main
git merge 새로운브랜치

새로운 브랜치에서

main으로 rebase하고

 

main으로 바꿔서

새로운 브랜치를 merge 한다.

 

단점으로는, conflict가 자주 발생한다.

 


squash and merge

앞서 배운 방법으로 merge 하고 commit을 할 때

 

실제 프로젝트에서 작업할 때

 

대다수 branch들을 3-way merge를 하면 

 

 

위의 이미지처럼 그래프가 상당히 지저분해지며 보기가 힘들어진다.

 

그 이유는 

 

merge 하고 필요가 없어진 branch들도 모두

 

표시해주기 때문이다.

 

이러한 상황을 깔끔하게 해결할 수 있는 방법이

 

squash and merge이다.

 

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

위의 명령어로 올릴 수 있다.

반응형

댓글