git rebase [-i] <branch 이름>
merge와 유사한 기능이나, merge 커밋이 남는 merge와 달리 merge 커밋이 남지 않고,
여러 commit을 하나로 합칠 수 있다.
rebase는 말 그대로 기본바탕을 새로 교체한다는 의미이다.
rebase 대상이 되는 branch에 새로 현재 브랜치를 판 것처럼 바뀐다.
현재까지의 commit이 branch 관계 없이 시간 순으로 합쳐지는 merge와 달리,
rebase를 사용하면, rebase를 실행한 branch의 commit 내역이 모두 최신으로 모아진다.
rebase 대상이 된 branch의 commit들이 더 과거의 순서로 들어가게 된다.
예를 들어, feature/signup branch에서 `git rebase main`을 실행한다면
main의 commit들 이후로 feature/signup branch의 commit 내역들이 몰아서 나타나게 된다.
또, merge와 달리 rebase -i 명령어를 사용하면 rebase를 실행한 branch의 커밋들을 합치거나 메시지를 수정할 수 있다.
이 기능으로 feature branch에 있던 commit들을 합쳐 하나의 최신 커밋으로 만들 수도 있다.
예를 들어, git rebase -i main 을 실행하면 pick 커밋 이름이 여러 줄 나오는데,
이력을 남길 커밋을 제외하고 나머지 커밋들의 pick 를 s로 수정해주고 wq로 나오면,
s로 바꾼 커밋들은 pick한 커밋으로 squash = 합쳐진다.
덕분에 github에 feature branch를 push하고 main에 합쳐졌을 때,
feature branch 하나 당 하나의 commit만 추가되는 깔끔한 처리가 가능하다.
git rebase --abort
rebase 작업 중 rebase 실행을 취소하고 rebase 시도 전으로 돌아가는 명령어.
* abort: 중단하다
git rebase --continue
rebase 작업 중 conflict를 마주했을 때 conflict를 resolve한 후 git add .를 해줘야 한다.
그 후 다시 rebase를 이어가기 위해 git rebase --continue를 입력해야 한다.
git reflog
commit 내역 뿐만 아니라 branch 간 이동, reset, rebase 등의 기록을 볼 수 있는 명령어.
git reset
특정 시점으로 돌아가는 명령어.
reflog에서 특정 시점의 hash id를 복사하여 reset 뒤에 붙여주면 해당 시점으로 되돌아갈 수 있다.
'개발 팁 > Git & Github' 카테고리의 다른 글
[Git&Github] 잘못된 branch에 작업했을 때, git stash (0) | 2023.04.19 |
---|---|
[git&github] 가장 최근 commit 메시지 변경하기 (0) | 2023.03.24 |
[git&github] branch 이름 변경하기 (1) | 2023.03.24 |
[git&github] 이미 git으로 관리돼버린 파일 내리고 cache 삭제하기 (0) | 2023.03.24 |
[Git & Git hub] 자주 쓰는 명령어 - 기초편 (0) | 2023.03.17 |