[Git] git에서 rebase를 통해 commit 내역들 수정하기

Git에서 작업중인 현재 branch에 있는 commit 내역들을 수정해보자


환경 및 선수조건

  • Git


문제 상황 및 목적

  • 새로운 branch를 만들어서 commit을 2번 하였는데 그 2번의 commit에 다 오타가 있어서 수정하고 싶은 상황


방법

  • rebase를 통해서 수정이 가능하다.
  • git rebase -i HEAD~~: HEAD를 포함해서 2번째 부모 커밋 전까지의 내역을 rebase를 통해서 수정하겠다.


HEAD와 인덱싱을 통해 찾기

  • HEAD: git에서 현재 작업중인 곳을 가리키는 포인터
  • HEAD~ or HEAD~1: HEAD로부터 첫번째 부모 커밋. 즉, 현재의 이전 커밋
  • HEAD~~ or HEAD2: HEAD로부터 두번째 부모 커밋. 즉, 현재의 이전 이전 커밋


실제 적용 사례

rebase 명령어 사용

  • 현재 작업내용을 포함해서 이전 커밋까지 수정한는거니까 아래와 같다.
$ git rebase -i HEAD~~


pick을 edit으로 변경

  • 아래처럼 화면이 뜨면 vim의 방식을 이용해서 pick -> edit으로 변경해준다.
  • i를 눌러서 변경하고 ESC를 누른 다음에 :를 누르고 wq를 누르면 저장된다.
...

pick 6a2298f add main.js to staticd folders
pick 7911e2d 코드에 있는 indentation tab(4spaces)로 수정

...
...

edit 6a2298f add main.js to staticd folders
edit 7911e2d 코드에 있는 indentation tab(4spaces)로 수정

...


중간 확인

  • 그러면 아래처럼 화면에 수정할 수 있도록 명령어를 치라는 화면에 쉘에 나와야 한다.
  • git commit --amend로 수정 한번하고 git rebase --continue를 통해서 다음 수정으로 넘어가는 방식
...

You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

...


수정하기

  • 명령어 실행 및 vim 방식을 통해서 메시지 수정
$ git commit --amend
  • 다음 수정으로 넘어가기
$ git rebase --continue


완료

  • 마지막으로 아래 명령어를 수행하면 성공이라고 뜬다. 뒤에 브랜치 명은 사용한 브랜치에 따라서 다르다.
$ git rebase --continue
Successfully rebased and updated refs/heads/feature/merge-all-js-codes-to-js-file.


참고자료