git fast-forward merge, 3way merge, rebase

seo·2021년 11월 4일
0

🔀Git

목록 보기
1/2
post-thumbnail

1.fast-forward merges

Git merge 중에서도 가장 깔끔하고 간단한 fast-forward merge

a,b,c commit을 master 브랜치에서 한 후 feature-a 브랜치를 만들고 d와 e commit을 했다.
새로운 branch가 생성된 후에 master branch에 변동사항이 없을 경우 master가 가리키고 있는 포인터를 c가 아닌 e로 옮겨 놓으면 된다.

git switch master #master branch로 이동 
git merge feature-a #feature-a를 master 브랜치에 merge
git branch -d feature-a #feature-a branch 지우기


fast-foward는 master 브랜치에 merge 되었다는 기록이 남지 않는다.

2.Tree-way merges

feature-a 브랜치가 파생된 이후에 master 브랜치에 새로운 commit이 있다면 fastforward가 불가능하다.


위 도식을 git history로 확인해보면 아래와 같다.

git switch master #master branch로 이동 
git merge feature-a #feature-a를 master 브랜치에 merge

3. rebase


b-1이 가리키는 commit을 b가 아닌 e로 변경하게 된다면 히스토리가 지저분해지는 3-way-merge를 피하고 fast-forward할 수 있게 된다.
하지만 e를 가리키는 commit은 b를 가리키는 commit과는 전혀 다른 새로운 commit이다. 다른 개발자와 함께 feature-a에서 작업하고 있는 경우 rebase 한다면 위험할 수 있다.
이미 히스토리가 서버에 업로드 되어 있는 경우라면 rebase하면 안된다.

git switch feature-a #feature-a branch로 이동 
git rebase master #리베이스
git switch master #master branch로 이동
git merge feature-a #feature-a를 master 브랜치에 merge

참고
https://git-scm.com/docs/git-merge

0개의 댓글