본문 바로가기
Tools/Git

[Git] 과거 특정 커밋 내용 수정하기

by A6K 2021. 6. 17.

git을 이용해서 소스코드 관리를 하다보면 과거에 수정한 커밋을 나중에 다시 고치고 싶을 때가 있다. 자잘한 오타 정도를 수정할 경우 새로운 커밋을 추가하면서 커밋 로그를 더럽히고 싶지 않은 경우가 있다.

이럴 경우 git rebase 명령을 이용해서 수정하면 된다.

커밋해시 확인

우선 수정하려는 커밋 정보를 git log 명령을 이용해서 확인하자.

$ git log

로그를 보고 변경하려는 이전 커밋을 확인하자. 그리고 그 커밋의 직전 커밋의 해시값을 복사한다.

git rebase -i

위에서 확인한 해시 값을 git rebase -i 명령의 인자로 입력해준다.

$ git rebase -i 80f060768c4354d8a0c4ed704c8e9b80a4a834f9

그러면 입력한 커밋부터의 로그들이 쭉 출력된다.

pick 이라는 단어 뒤에 커밋 해시 값이 있고, 그 뒤에 커밋 로그가 따라온다.

수정하고 싶은 커밋의 맨 앞을 pick에서 edit으로 바꿔준다. 그리고 에디터 저장하고 종료하면 해당 커밋 직전으로 돌아간다.

$ vi ${file_path} # 파일들 수정, IDE로 해도 됨
$ git add ${file_path} # 수정한 파일을 추가
$ git commit --amend

이 상태에서 커밋의 수정하려고 했던 내용들을 수정한다. 그리고 수정한 파일을 git add ${file_path} 명령을 통해서 추가하고 git commit --amend 명령을 이용해서 수정 내용에 대한 커밋을 작성한다.

원래의 커밋 메시지가 나온다. 필요하다면 커밋 메시지도 수정해준다. 에디터에서 저장한 내용을 저장하고 종료한다.

$ git rebase --continue

그리고나서 rebase를 진행한다. (추가로 수정하려는 내용이 있다면 반영되고, 만약 이후 커밋들과 충돌이 있다면 해결해야한다)

이 상태에서 git push 를 수행하면 실패한다. 이 경우 이전 커밋 로그가 수정되었기 때문에 원격 저장소에 커밋 내용이 반영될 수 없다. 따라서 git push -f 를 이용해서 강제로 반영해야한다. 강제로 원격저장소에 반영하면 함께 작업하는 동료들이 조금 번거로울 수도 있다.;;;

댓글