Git rebase & worktree
git
2분 읽기Git rebase & worktree
rebase
남의 작업(main)이 앞으로 갔을 때, 내 커밋들을 그 끝에 다시 붙이는 것.
전:
A - B - C (main)
\
D - E (내 브랜치)
후 (git rebase main):
A - B - C - D' - E'
D, E가 재작성되어 C 뒤에 붙음 (커밋 해시 바뀜).
merge랑 차이
결과 코드는 같음. 히스토리 모양이 다름.
merge→ 가지 모양, merge commit 생김, 히스토리 보존rebase→ 일직선, 깔끔하지만 커밋 재작성
언제
- PR 올리기 전에 main 최신화할 때 → rebase
- PR 최종 합칠 때 → merge
명령어
git rebase main
# 충돌 나면
git rebase --continue
git rebase --abort
# 커밋 정리 (최근 3개)
git rebase -i HEAD~3
주의
이미 push해서 팀이 같이 쓰는 브랜치에선 쓰지 말 것. 혼자 쓰는 브랜치에서만.
worktree
같은 repo를 여러 폴더에서 동시에 열 수 있는 기능. .git은 하나인데 브랜치를 따로 체크아웃.
git worktree add ../repo-hotfix hotfix/login-bug
git worktree list
git worktree remove ../repo-hotfix
각 폴더는 독립. /repo-hotfix에서 커밋해도 feature 브랜치랑 관계없음.
언제 유용
- 빌드가 무거워서 브랜치 전환 시 캐시 날아가는 게 아까울 때
- IDE 인덱싱이 브랜치 전환마다 느릴 때
- 두 브랜치를 나란히 보면서 비교할 때
대부분의 경우는 git stash + 브랜치 전환으로 충분함.