✨ 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 커밋을 자동 처리하려면 이 옵션 사용 가능
- 수정 커밋을 자동으로 병합
내가 라섹한 후 일주일채 안될 때 블로깅한거라 오타 확인을 잘 못하겠음...
'프론트엔드 👩🏻💻' 카테고리의 다른 글
[ETC] window 객체 ✨ (0) | 2024.11.13 |
---|---|
[암호화] RSA 암호화 정리 ✨ (0) | 2024.11.13 |
[ETC] as const vs const enum 정리 ✨ (+ 타입 단언) (1) | 2024.09.16 |
[타입스크립트] declare module 정리 (1) | 2024.09.12 |
[타입스크립트] 타입 종류✨ (3) | 2024.09.11 |