코드를 작성하다 보면 오타나 사소한 걸 고치기 위해 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를 통해 해결했는데 더 좋은 방법을 아시는 분 있으시면 알려주시면 감사하겠습니다!
'Git' 카테고리의 다른 글
git rebase 실수는 git reflog (0) | 2024.06.14 |
---|---|
git 설치 (0) | 2023.12.15 |
Git init (0) | 2023.12.15 |