[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~
orHEAD~1
:HEAD
로부터 첫번째 부모 커밋. 즉, 현재의 이전 커밋HEAD~~
orHEAD2
: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.