브랜치마다 커밋을 맥시멈 두세개만들고 바로 리베이스 진행
그리고 또 작업해서 커밋 두세개 쌓이면 다시 바로 리베이스(베이스 바꿀 지점 없어도!) 무한반복해서 작업하는걸 추천
해당 브랜치의 base commit 을 확인하는 방법:
git merge-base main feature/~~~
(필수아님)
how to
1. 새로운 작업을 모두 마치고 Push 하기 전에는
- Main branch로 이동하여 remote main을 Pull 받는다
- 내가 push 할 Fearture branch로 이동한다
git rebase -i main
를 진행
2. Rebase 를 하는 동안 squash 진행할때
- 가장 오래된 commit을 pick한다.
- 다른 커밋 메세지는 가장 오래된 commit을 기준으로 squash한다.
(Squash 할 pick을 s 로 바꾸면됨. 걍 첫번째 픽 빼고 나머지 다 s로 바꾸라는 얘기임)
- 다른 커밋의 작업 내역이 없어지는 것 ❌
Ese -> :wq!
로 창에서 빠져나온다.
3. 수정용 에디터가 하나 더 나타난다
최종적으로 이 rebase된 커밋의 내용을 작성하는 부분으로 현재까지 적은 커밋 메세지가 전부 나타난다.
1. 불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메세지를 정성껏 작성
2. Ese -> :wq!
로 창에서 빠져나온다. (저장하고 창 끄기)
4. Successfully rebased!
- 성공했다면 git log로 깔끔해진 커밋 메세지를 확인
git push
5. Rebase 후 push하기
- Rebase 는 commit history를 정리하는 역할
- 같은 브랜치에서 rebase를 할때마다 history가 달라질 수 있다.
- 수정 사항이 추가로 생긴 후 다시 rebase하면 history가 무조건 달라진다.
- Git 은 history가 다른 branch의 push를 허용하지 않는다.
git push origin feature/~~~ -f
-f 옵션을 사용하여 force push를 진행 -f 아니면 —force(하이픈 두개) 둘중 하나
Rebase 중 conflict 해결하기
- 충돌이 일어난 경우 rebase가 진행되지도, 끝나지도 않고 도중에 멈춰있으며 터미널이 (rebase~1/6) 같은 메세지로 rebase 진행중임을 표시해준다.
- 컨플릭트 수정하고
Git add .
- Git commit은 하지 않는다
Git rebase —continue(하이픈두개)
로 리베이스 진행
- 충돌이 나면 그때마다 충돌해결하고
git add .
→ git rebase —continue(하이픈두개)
반복
- 해도해도 해결 안된다면
git rebase —abort(하이픈 두개)
로 rebase 진행 전 상황으로 되돌리기