Git

rebase로 Commit 병합하기

두잇 두두 2023. 12. 18. 15:50
728x90

코드를 작성하다 보면 오타나 사소한 걸 고치기 위해 commit을 하는 경우가 생깁니다!

그렇게 되면 commit 수가 많아지고 (저는 pr 받을 때 33개의 커밋을 pr 받은 적도..)

나중에 기능 참조나 rollback 하려고 할 시 찾기 힘들게 되는 단점이 있습니다ㅠ

그래서 rebase를 통해 기능별로 commit을 병합하는 것을 권장합니다!

 

git log

#i는 interactive의 약자로 인터랙티브 모드로 다양한 작업을 할 수 있게 지원합니다
git rebase -i HEAD~(원하는 갯수)

git log를 통해 얼마만큼의 git을 불러와서 처리할지 정한 뒤 HEAD~개수를 통해 interactive 창을 엽니다!

 

이런 창이 나오는데 앞에 pick을 수정하게 되면 기능이 동작합니다!

pick 커밋을 선택
reword 커밋 메세지를 수정
edit 커밋을 수정
squash 커밋을 합침
fixup 이전 커밋과 합치고, 메세지는 버림
drop 커밋을 삭제
exec 쉘 명령어를 실행합니다
break 리베이스를 중단하고 나중에 git rebase --continue로 계속 할 수 있습니다
label 현재 HEAD를 레이블로 지정합니다
reset HEAD를 특정 레이블로 재설정합니다
merge merge 커밋을 생성합니다
update-ref 새로운 커밋에서 이전 커밋을 추적하는 래퍼런스를 만듭니다

※커밋 수정은 아래에서 위로 되기 때문에 위쪽에 pick이 존재해야 합니다

 

(rebase 하나에 이렇게 많은 기능들이 있다는 것에 살짝 놀랐었는데 저걸 언제 다 써볼 일이 있을까도 생각이 드네요..

저는 pick, squash, drop만 사용해 봤는데..ㅎ)

 

그 중 squash를 사용할 건데 단축키 s로도 사용 가능하며 wq를 통해 위와 같은 화면을 만날 수 있습니다

위 화면에서 남길 message 편집이 가능하고 그전 화면에서 commit 제목도 변경이 가능합니다!

 

이렇게 할 시 local에서는 commit이 변경되었지만 이 전 commit들이 github에 올린 경우 git push 브런지 -f를 통해 강제로 브런치에 push 해주는 작업이 필요합니다! (저는 처음에는 몰라서 여러번 pull 하며 왜 안되지 하다가 찾아냈네요..ㅠ)

 

이렇게 rebase를 통해 commit 이력을 관리하는 방법을 포스팅해봤습니다!

 

▷rebase squash 하다가 만약 잘못 병합해 버렸을 시

현재 저는 git checkout을 통해 전 이력으로 가서 branch를 만들어 -f push를 통해 해결했는데 더 좋은 방법을 아시는 분 있으시면 알려주시면 감사하겠습니다!