개요
git rebase를 실무에서 여러 브랜치에 적용하려니까 헷갈리는 점이 많아서 이번 기회에 git 공부를 확실히 하고자 블로그를 작성하게 되었다. 이 포스팅에서는 git 명령어 뿐만 아니라 fork라는 도구도 함께 사용하며 익힐 것!
1. git rebase
git rebase는 말 그대로 브랜치의 base를 다시(re) 설정한다. git rebase를 통해 커밋 그래프를 단순하게 가져가고, 의미 있는 커밋들만 남겨서 더 원활한 협업을 지원한다.

현재 master 브랜치의 a3 커밋을 베이스로 작업을 진행하고 있고, master 브랜치는 또 다른 작업들이 진행된 상황이다. 이 master 브랜치의 최신 작업 내용을, 내가 현재 작업 중인 feature 브랜치에도 적용하고 싶을 때 rebase 명령어를 사용한다.
보통 main 브랜치에 merge하기 이전에, rebase 작업이 요구된다. 이유는 다음과 같다.
- 내 feature 브랜치의 커밋을 최신 main 위로 재적용해서, 마치 main에서 방금 브랜치를 만든 것처럼 히스토리를 정리한다.
- 충돌 방지 & 문제가 발생하더라도 미리 rebase 과정을 통해 해결할 수 있다.
- rebase -i HEAD로 커밋을 깔끔하게 정리할 수 있다.
간단하게 다음과 같은 방법으로 rebase를 할 수 있다.
# main 브랜치로 이동
git checkout main
# 최신 main 적용
git fetch origin
git pull origin main
# feature 브랜치로 이동
git checkout feature
# main을 base로 rebase 실행
git rebase main
이 과정을 거치면 git history가 다음과 같이 정리된다.

2. fork로 rebase main 실습해보기

- 기존 Initial commit에서 로컬 feature 브랜치가 분기
- 로컬 feature-001에서 작업 후 add/commit, origin push는 X
- origin main 변경사항 있음!
fork에서 제공하는 git history 그래프를 잘 활용하면 좋은데, 지금 origin/main이 local/feature-001보다 앞선 상황이다. 즉, 로컬브랜치가 origin main pull 했을 당시보다 origin 작업이 진행된 것.



rebase 이후에 깔끔해진 분기 모습!
이 상태에서 push --force를 내 로컬 브랜치에 하면, origin main 변경 사항 위에 커밋들이 깔끔하게 올라가는 걸 확인할 수 있다.

조금 더 깔끔하게 진행하려고 local main - orign main도 싱크 맞춰줌

rebase로 정리된 상태에서 force push 해보면

요렇게 PR을 깔끔하게 생성할 수 있다.

PR이 머지되면 rebase된 내용 또한 잘 반영되어있는 걸 확인할 수 있다.
rebase 이후에는 왜 force push를 해야할까?
Rebase는 "히스토리를 다시 쓰는 작업"이기 때문이다!
- 커밋 내용이 같아 보여도 커밋 ID가 새로 생성됨
- 그래서 기존 원격 브랜치의 히스토리와 일치하지 않음
- Git은 이걸 “위험한 덮어쓰기”라고 생각해서, 기본 푸시 거부
- 대신 --force를 사용해서 "내 히스토리로 강제로 덮어쓰겠다" 라고 명시해야 함
3. rebase로 내 로컬 커밋 깔끔하게 정리하기(rebase -i)
(작성 예정)
4. 알게된 점
- origin feature branch에 push 하기전에 main과 rebase를 하자.
- main rebase 이전에는 local main - origin main 요렇게도 fetch를 하자
'회고 & 후기 > 개발 일지' 카테고리의 다른 글
| [개발일지] 배포 삽질기 | 심볼릭 링크, 리눅스의 Capacities, ufw, netstat (0) | 2024.03.25 |
|---|---|
| [개발일지] 개발자가 가져야하는 습관, git pull (0) | 2023.09.20 |
| [개발일지] git 영역(Staging)과 소스관리 | 브랜치 전략, PR과 Merge | 협업 시 git 잘 쓰는 방법 (1) | 2023.09.16 |
| [개발 일지] 프로젝트 성능 최적화 | 원하는 폴더에 python package 함께 설치하고 AWS Lambda에 zip 파일 올리기 1편 (2) | 2023.06.13 |
| [개발 일지] 도커 컨테이너에서 웹 개발하기 (1) (0) | 2023.05.15 |
