Git & Github

[Git&Github] merge대신 깔끔하게 rebase!

왈왈디 2023. 4. 20. 16:28
728x90

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 뒤에 붙여주면 해당 시점으로 되돌아갈 수 있다.

728x90