ㅇ.ㅇ
[Git] Rebase 본문
반응형
1. 기본 rebase 명령어
git rebase
- rebase는 브랜치의 커밋들을 다른 브랜치의 최신 상태 위에 다시 쌓는 명령어.
- 쉽게 말해, 내 작업을 최신 상태 기준으로 정리해서 얹는 작업이다.
git rebase 브랜치명
- 현재 브랜치의 커밋들을 '지정한 브랜치'의 최신 커밋 뒤로 재배치한다.
- 주로 feature 브랜치를 최신 main 브랜치 기준으로 정리할 때 사용한다.
git checkout feature
git rebase main
// 실행 전
main: A---B---C
\
feature: D---E---F
// 실행 후
main: A---B---C
\
feature: D'--E'--F'
2. 왜 rebase를 사용할까?
기본적으로 Git에서 협업할 때 merge를 많이 사용한다. 하지만 merge는 브랜치를 합치면서 불필요한 머지 커밋이 쌓이기 쉽고, 커밋 로그가 복잡해진다. rebase는 커밋 히스토리를 깔끔하게 정리하고 싶을 때 매우 유용하다.
3. 언제 rebase 사용하면 좋을까?
- 작업 브랜치를 최신 상태로 맞추고 싶을 때
- 협업 전에 커밋 히스토리를 깔끔하게 정리하고 싶을 때
- 불필요한 merge commit 없이 브랜치를 정리하고 싶을 때
- 여러 개의 커밋을 하나로 합치고 싶을 때
4. 자주 사용하는 git rebase 명령어 정리
브랜치를 다른 브랜치 위로 재배치
git checkout feature-branch
git rebase main
- feature-branch의 작업을 main 브랜치 뒤에 다시 정리해서 쌓는다.
- 협업 전 rebase를 해두면 충돌도 줄고 로그도 깔끔해진다.
인터랙티브 rebase (커밋 수정, 합치기, 삭제 등)
git rebase -i HEAD~3
// 실행 결과
pick 123abc 첫 번째 커밋
pick 456def 두 번째 커밋
pick 789ghi 세 번째 커밋
- 최근 3개의 커밋을 인터랙티브 모드로 편집한다.
- 여기서 pick을 reword, squash, drop 등으로 바꾸면 원하는 대로 커밋을 조정할 수 있다.
rebase 충돌 해결 후 재개
// 충돌 발생 (예시)
CONFLICT (content): Merge conflict in app.js
// 충돌된 파일 수정 후
git add 파일명
// rebase 계속 진행
git rebase --continue
// 현재 rebase 진행 중인 내용을 취소하고 원래 상태로 돌아간다
git rebase --abort
pull 시 rebase 사용
git pull --rebase
// 실행 전
원격: A---B---C
로컬: A---B---X---Y
// 실행 후
로컬: A---B---C---X'---Y'
- 원격 브랜치의 최신 변경 사항을 내 브랜치에 merge 없이 정리해서 적용한다.
- 협업 시 커밋 히스토리가 깔끔하게 유지된다.
특정 커밋 이후만 옮기기
git rebase --onto main feature~3 feature
- feature 브랜치의 마지막 3개 커밋만 main 위에 얹는다.
- 특정 부분만 골라서 재배치할 수 있다.
rebase 후 강제 푸시
git push --force
// 더 안전함
// 원격 저장소의 브랜치 상태가 내 로컬에서 마지막으로 pull한 상태와 같을 때만 푸시를 허용
git push --force-with-lease
GPT가 만들어준 시각자료로 마무리 ㅎㅎ
반응형
'Today I Learned' 카테고리의 다른 글
[DEV] curl (0) | 2025.03.30 |
---|---|
[Tomcat] Tomcat의 war-tracker 파일 (0) | 2025.03.28 |
[Git] Stash (0) | 2025.03.23 |
[Java] META-INF 디렉토리와 MANIFEST.MF (0) | 2025.03.12 |
[Java] try-with-resources (자원 관리 최적화) (1) | 2025.03.11 |