Git 의 commit
은 최대한 명확한 범위 안에서 진행하려고 노력한다.
그렇지만 부득이하게 대충 명확하지 못한 범위로 commit
하는 경우가 있다.
나 같은 경우에는 개발하던 중 개발하는 환경이 옮겨질 때 (ex. 데스크탑 -> 노트북) 백업 개념으로 commit
을 종종 하곤 한다.
이번에는 이 같은 commit
을 하나로 합치는 방법을 알아보려 한다.
Git 에서는 rebase
라는 기능을 제공한다.
이름 만 봐도 알 수 있듯이 베이스(기준점)을 재배치 한다는 뜻이다.
보통 브랜치 개발이 완료되면 merge
를 하게 되는데, 앞서 말했던 명확하지 않은 commit
이 많이 존재하면 히스토리를 볼 때 많이 복잡해진다.
아래 경우를 보며 한번 같이 진행해보자.
위 사진은 내가 진행하던 토이 프로젝트의 커밋 중 일부이다.
상단의 feat: add layout (header, footer) - 3ce0f38
가 정상적인 commit
이고,
하단의 refactor: save-220314-17:53 -01b6c48
이 임의로 백업하기 위해 적은 commit
이다.
나는 상단의 3ce0f38
만 남기고 01b6c48
을 합쳐 흔적 자체를 없애버리려고 한다.
이는 HEAD로 부터 2개의 commit
을 합치는 작업이다.
git rebase -i HEAD~2
HEAD로 부터 2개의 commit
을 합치기 위해 위와 같이 작성하였다.
상단의 2줄을 확인해보면, 내가 합치고 싶었던 01b6c48
과 3ce0f38
이 확인된다.
나는 01b6c48
을 남기고 싶기 때문에 pick을 지우지 않고, 3ce0f38
을 Pick에서 s로 변경한다.
그리고 저장을 하면 아래와 같은 창이 확인된다.
commit
메세지를 원하는 대로 수정하고 저장하면 rebase
가 완료된다.
오! 드디어 끝난 거 맞죠!! 🥳
rebase
작업이 끝나긴 했지만, 아직 저장소에는 적용되지 않은 상태이다.
일반적으로 push
를 진행하게 되면 저장소와 로컬의 commit
히스토리가 달라 정상적으로 진행되지 않는다.
따라서 강제적 옵션을 주어 push를 완료한다.
git push -f
정상적으로 commit
이 합쳐지고, 히스토리에 나타나지 않는 것이 확인된다.
commit
개수 확인git rebase -i HEAD~개수
명령어 진행commit
이외의 Pick
-> s
commit
메세지 수정 및 저장git push -f
로 저장소에 강제 push
+ 읽어주셔서 감사합니다.
+ 오타, 내용 지적, 피드백을 환영합니다. 많이 해주실 수록 제 성장의 밑거름이 됩니다.