가끔씩 git commit 중에 중간에 낀 커밋 내용을 수정해야 하는 경우가 있습니다. 다만 위 아래로 커밋들이 쌓여있어 어떻게 해야 할지 난감한 경우가 많았죠. 다행히도 중간 커밋을 바꿀 수 있는 방법이 있습니다. 해당 git 커밋의 아이디를 안다면 git rebase -i 명령어를 사용하면 됩니다. 제가 바꾸고 싶은 커밋 아이디가 b08c300이라면 git rebase -i b08c300^을 입력합니다.
git rebase -i 아이디^ // 예시 git rebase -i b08c300^
아이디 뒤에 ^가 포인트입니다. ^를 붙이지 않으면 해당 아이디의 커밋이 포함되지 않습니다.
그러면 터미널이 에디터 모드로 전환되는데 내용 중에 제일 위에 pick 아이디
라는 글자가 보일겁니다. 여기서 pick을 edit으로 바꾸고 저장하면 됩니다. 저장하는 방법이 처음 하는 사람에게는 조금 어려울 수 있습니다.
pick b08c300 add: builder <--------------- 내가 바꾸고 싶은 커밋이 이거라고 칩시다
pick 7f6287f add: prototype
pick cc8382d add: command
pick 6d486a8 add: command2
pick 4b153de add: state
pick d418140 add: strategy
pick d7ea826 add: template method
pick 573aff2 add: chain of responsibility
pick b6633fd add: observer pattern
.git/rebase-merge/git-rebase-todo [unix] (11:29 14/11/2024) 1,1 꼭대기
"~/WebstormProjects/grimpan/.git/rebase-merge/git-rebase-todo" [유닉스] 54L, 2149B
터미널에 vim 에디터가 보통 뜰텐데 a
를 눌러서 입력모드(제일 하단에 -- 끼워넣기 --
나 -- insert --
가 보입니다)로 간 뒤 pick을 edit으로 변경합니다.
edit b08c300 add: builder <--------------- pick을 edit으로 변경
pick 7f6287f add: prototype
pick cc8382d add: command
pick 6d486a8 add: command2
pick 4b153de add: state
pick d418140 add: strategy
pick d7ea826 add: template method
pick 573aff2 add: chain of responsibility
pick b6633fd add: observer pattern
.git/rebase-merge/git-rebase-todo [unix] (11:29 14/11/2024)
-- 끼워넣기 --
esc
키를 눌러 명령어모드로 되돌아가 :wq
입력 후 엔터
키를 눌러 저장할 수 있습니다.
edit b08c300 add: builder
pick 7f6287f add: prototype
pick cc8382d add: command
pick 6d486a8 add: command2
pick 4b153de add: state
pick d418140 add: strategy
pick d7ea826 add: template method
pick 573aff2 add: chain of responsibility
pick b6633fd add: observer pattern
.git/rebase-merge/git-rebase-todo [unix] (11:29 14/11/2024)
:wq <------------------ esc를 누른 후 :wq입력하면 글자가 여기에 입력됩니다.
그러면 소스 코드가 해당 커밋으로 되돌아갑니다. 여기서 여러분이 원하는 수정을 한 뒤 다음 명령어를 입력합니다
git add .
git rebase --continue
그러면 다시 에디터 모드가 되면서 커밋 메시지를 수정하는 부분이 나오는데, 커밋 메시지를 변경할 게 없다면 :wq
를 입력하고 엔터
를 눌러 저장하면 중간 커밋이 변경된 모습을 확인할 수 있습니다.
그런데 이 방법으로는 첫 번째 커밋은 수정할 수 없습니다. invalid upstream 에러가 나게되는데요. 이 때는 첫 번째 커밋(A라고 합시다) 앞에 하나의 커밋을 추가하고 두 번째 커밋이 된 A 커밋을 위 방법으로 수정하면 됩니다. 첫 번째 커밋을 추가하는 방법은 여기에 있습니다.