본문 바로가기

프론트엔드 👩🏻‍💻

[Git] merge와 rebase 정리 ✨

참고자료

 

 

✨ rebase

- 브랜치의 base를 재설정한다는 의미

- branch의 base란 branch가 뻗어나오는 시작점을 base이다.

 

 

 

💻 예시를 살펴보자!

직접 그림...

- dev 브랜치에서 branch1에는 commit 1, 4가 있고, branch2에는 commit 2, 3이 있다.

 

 


 

 

- 브랜치 두개를 머지시켜보자

git merge dev branch1
git merge dev branch2

- commit graph가 꼬여있다.

- 동시에 작업한 브랜치가 여러개 존재하고, 한번에 변경사항을 파악하기 어렵다.

 

 


 

- rebase는 어떨까?

- 일단, `merge --no-ff` 시켜보자

📌 `merge --no-ff`
- 새로운 병합 커밋 생성 = fast-forward(새로운 병합 커밋 생성하지 않고 브랜치 업데이트) 비활성화

 

 

git merge --no-ff dev branch1

 

 


 

 

- 이번엔 branch2를 rebase해보겠다.

git rebase dev branch2

- dev branch를 기준으로 branch2의 커밋(commit 2, 3)들이 dev 브랜치의 최신 상태 위로 옮겨지며 새로운 커밋 ID가 생성된다.

 


 

 

- (dev 브랜치에 rebase됐지만, 굳이 굳이) merge까지 시켜보자!

git merge --no-ff dev branch2

 

 

 

📕 rebase 옵션 종류

 `interactive rebase`

- 커밋을 세밀하게 제어

- 커밋 수정(edit), 병합(squash), 삭제(drop)

 

`--onto`

- 다른 위치로 커밋 이동

 

`--abort`

- rebase 취소하고 원래 상태로 되돌릴 때

 

`--continue`

- 충돌 해결한 후 rebase 계속 진행

 

`--skip`

충돌 무시하고 rebase 계속 진행

 

`--preserve-merge / --rebase-merges`

- 기본적으로 rebase는 병합 커밋을 무시하지만, 병합 커밋을 유지하면서 rebase 할 수 있다.

- 히스토리에서 병합 구조 유지하면서 rebase 수행하고 싶을 때 (그런 경우가 있나...?)

 

`--autosquash`

- fixup이나 squash 커밋을 자동 처리하려면 이 옵션 사용 가능

- 수정 커밋을 자동으로 병합

 

 

 

 내가 라섹한 후 일주일채 안될 때 블로깅한거라 오타 확인을 잘 못하겠음...