우선 해당 브랜치의 커밋 히스토리 페이지로 이동한다. 콘솔도 해당 브랜치로 이동한다.
변경하고 싶은 커밋이 위에서부터 몇 번째 것인지 확인한다. n번째라고 가정.
unstage된 변경사항이 있을 경우 먼저 처리한다. 커밋하거나 'git stash'할 수 있다.
콘솔에 'git rebase -i HEAD~n'를 입력한다.
vim 에디터가 나온다. 커밋들이 n번째까지 시간 역순으로 나열되어 있고 옆에 pick이라고 씌여있다. i를 누르면 INSERT 상태가 되서 텍스트를 추가할 수 있다. 변경하려는 커밋의 옆에 있는 pick을 edit로 바꾼다. ESC를 누르고 :wq를 눌러서 나온다.
그러면 해당 커밋이 최근 커밋인 상태가 된다.
그래서 인텔리제이로 볼 수 있는 프로젝트 상태도 해당 커밋의 상태가 되어 있다.
코드 변경 내역을 바꾸고 싶은게 있다면, 원하는 대로 바꿔진 상태가 되도록 인텔리제이 안에서 코딩해서 만든다. 콘솔에 'git add .'을 입력한다. 이렇게 스테이징한 파일 변경을 'git commit --amend'로 기존 커밋에 반영시킬 수 있다.
'git commit --amend'를 입력한다. vim 에디터가 나온다. i를 눌러 INSERT된 상태로 커밋 메시지를 수정할 수 있다. 더 변경할게 없다면 ESC를 누르고 ':wq'를 입력해서 나온다. 그러면 n번째 커밋은 로컬에선 수정된다.
'git rebase --continue'를 입력한다. 그러면 로컬에서 실제 커밋 히스토리의 최근 커밋부터, 위에서 n-1번째 커밋까지, n번째 커밋의 코드 변경 내역의 변경내용이 모두 한번에 반영된다. 여기서 커밋 간 코드가 겹치는 부분이 있으면 이 단계에서 충돌이 일어날 수도 있다.
콘솔에 'git push origin 브랜치이름 --force'를 입력하면 remote에 반영된다.
출처: ChatGPT
정말 잘 읽었습니다, 고맙습니다!