아래처럼 특정 커밋을 지워야 할 때는 git rebase기능을 사용하면 된다.
제거 하려는 커밋의 이전 커밋 id를 입력해줘야 한다
git rebase -i 이전 커밋 id
git rebase -i 5450d0f
명령어를 입력하면 rebase 다음 같은 화면이 나오고 상단에는 rebase 커밋 이후 커밋들이 보인다.
이중에서 삭제할 커밋을 pick에서 drop 혹은 d로 바꾸고 저장해주면 된다.
vim명령어
i : 편집모드 (하단에 --INSERT--라고 나온다.)
esc : 명령모드
:wq : 저장 후 종료
우선 conflict들을 모두 해결해 준다.
이후 해당 파일들을 add해주고
git rebase --continue
명령어를 입력해준다.
그후 git log를 확인해보면 drop한 커밋이 삭제된것을 볼 수 있다.
conflict시 rebase작업을 무르고 싶다면
git rebase --abort
명령어를 활용한다.
이미 공개 저장소에 Push 한 커밋을 Rebase 하지 마라
git 공식문서를 보면 rebase를 사용하다보면 위험한 상황이 생길 수 있지만 위 사항만 지키면 rebase를 사용하면서 문제될 점은 없다고 말한다.
이유를 요약하면 rebase는 기존 커밋을 그대로 사용하는 것이 아닌 내용은 같지만 다른 커밋을 새로 만들기 때문이다.
자세한 내용은 여기서 확인할 수 있다.
https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0