- Main branch로 이동(
git checkout main
)
git pull origin main
git log
: 변경된 log 기록 확인- 내가 push 할 feature branch 로 이동(
git checkout feature/nav
)
git log
: main branch 에 변경된 사항이 아직 feature branch 에 없음을 확인git rebase -i main
진행
- 가장 오래된 commit을 pick 함
- 다른 commit message 는 가장 오래된 commit을 기준으로 squash 함
- 다른 commit 의 작업 내역이 없어지는 것이 아님
esc
->:wq
로 저장하고 에디터 창에서 빠져나오기
- 최종적으로 이 rebase된 커밋의 내용을 작성하는 부분
- 현재까지 작성한 commit message가 전부 나타남
- 불필요한 내용을 제거하고 현재 수정 내역에 대한 commit message 를 구체적(
multi-line commit
형태)으로 작성
multi-line commit
: title(요약) + body(상세 내용)esc
->:wq
로 저장하고 에디터 창에서 빠져나오기
- 성공했다면 git log로 깔끔해진 commit message 확인
- remote main 으로 push 진행 (
git push origin feature/nav
)
- rebase는
commit history
를 정리하는 역할
- 같은 브랜치에서 rebase를 할 때마다 history가 달라질 수 있음
- 수정 사항이 추가로 생긴 후, 다시 rebase 하면 history 가 무조건 달라짐
- git은 history가 다른 branch의 push를 허용하지 않음
git push origin feature/nav -f
-f 옵션을 사용하여force push
를 진행
- 충돌이 발생한 경우 rebase가 진행되지도, 끝나지도 않고 도중에 멈춰 있음
- 터미널이 (rebase ~ 1/6) 과 같은 메세지로 rebase가 진행중임을 알려줌
- 충돌은 충돌일 뿐, 해당하는 코드를 수정 후
git add .
git commit
은 하지 않음. 수정 사항이 없으므로git rebase --continue
를 진행
- 멈춰 있던 rebase 가 진행됨
- 충돌이 여러번 나면 그 때마다 충돌을 해결하고
git add .
/git rebase --continue
를 반복함- 계속 해결이 안된다면,
git rebase --abort
로 아예 rebase를 진행하기 전 상황으로 돌아갈 수도 있음
Git reset soft vs hard
Git log
Git reflog
Git checkout <commit>
Git stash & git stash apply & git stash clear
<출처> wecode(코딩 부트캠프) 세션