[Git] 이미 push한 commit message 수정하기
commit message에 오타가 있는 줄도 모르고..
써야할 내용을 누락한 지도 모르고 이미 push까지 해버렸다면?
잠시 스스로가 밉겠지만 해결책은 있다.
경험으로 알게된.. force push를 이용해 push한 commit message를 수정하는 방법을 정리해본다. 물론 모든 것엔 양면성이 존재한다. 편리한만큼 어마어마한 위험 요소도 있으니 반드시 끝까지 읽고 주의할 것.
Step 1. rebase로 에디터 들어가기
git rebase HEAD~1 -i
git rebase HEAD~1 -i
터미널에서 위 명령어로 직전 commit message를 수정하기 위해 에디터(편집모드)로 들어간다.
➕ 참고사항
위에서의 HEAD~1
은 바로 직전 commit을 수정하고 싶을 경우이고,
좀더 전의 내용을 수정하고 싶다면 HEAD~2
, HEAD~3
처럼 수정이 필요한 commit이 몇 번째 전인지 고려하고, 그 숫자로 변경해 입력하면 된다.
Step 2. 에디터에서 pick
을 reword
로 변경
commit message 앞의 'pick' -> 'reword' 변경 후, esc -> :wq! -> enter
commit message 앞의 'pick' -> 'reword' 변경 후, esc -> :wq! -> enter
수정모드로 들어가면, 기존에 작성한 commit message가 보여 당장이라도 고치고 싶겠지만 잠시 참는다. message 앞쪽에 위치한 단어 pick
을 commit의 다른 내용을 그대로 둔 뒤 commit message만을 수정하는 명령어, reword
로 바꾼다.
변경을 완료했다면 esc -> :wq! -> enter
순으로 해당 내용을 저장한다. (아직 commit message를 수정하기 전!)
Step 3. commit message 수정
commit message 수정 후, esc -> :wq! -> enter
commit message 수정 후, esc -> :wq! -> enter
드디어 commit message를 수정할 시간이 왔다.
두 번의 실수는 없도록 꼼꼼히 확인하며 내용 수정을 마치고,
step 2번에서처럼 esc -> :wq! -> enter
로 에디터를 빠져나온다.
여기까지 완료하면 편안해진 마음으로 git push origin 경로
로 commit을 push하려 하지만, 붉은 에러 메세지만 반겨줄 뿐 push가 되지 않는다.
원격 저장소의 내용과 로컬 저장소의 내용이 상이해 github가 변경사항을 받아들이지 않기 때문. 성공적인 수정을 위해서 우리는 한 가지 스텝이 더 필요하다.
Step 4. 강제(force) push 수행
git push origin 경로 --force
git push origin 경로 --f
git push origin 경로 --force
git push origin 경로 --f
--force
(--f
로도 표기가능) 명령어는 원격 저장소의 내용이 로컬 저장소의 내용과 일치하도록 원격 저장소의 변경사항들을 강제로 덮어씌운다.
그리고 github를 가보면? 정상적으로 push가 이루어져 있는 것을 볼 수 있다.
💥 주의사항
force 명령어는 검색해보면 절대 사용하지 말라는 내용이 많을 정도로..원격 저장소의 commit들이 유실될 수 있어 굉장히 조심히 사용해야한다. 특히 해당 원격 저장소를 다른 사용자들과 공유하는 상황이라면 사용하지 않는게 좋다. (나는 혼자 수행하는 프로젝트에서 해당 문제가 발생해 사용했다.)
다른 사용자의 작업물에 강제로 덮어쓰기가 이루어져, 다른 사용자들의 작업과 원격 저장소 내용의 연결을 끊는 재앙을 가져올 수 있기 때문. 반드시 잘 알고 사용하자.
Author And Source
이 문제에 관하여([Git] 이미 push한 commit message 수정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev_bomdong/Git-이미-push한-commit-message-수정하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)