[Git] 이미 push한 commit message 수정하기

DongHee Kim·2021년 8월 12일
26

Web

목록 보기
6/9

commit message에 오타가 있는 줄도 모르고..
써야할 내용을 누락한 지도 모르고 이미 push까지 해버렸다면?
잠시 스스로가 밉겠지만 해결책은 있다.

경험으로 알게된.. force push를 이용해 push한 commit message를 수정하는 방법을 정리해본다. 물론 모든 것엔 양면성이 존재한다. 편리한만큼 어마어마한 위험 요소도 있으니 반드시 끝까지 읽고 주의할 것.

Step 1. rebase로 에디터 들어가기

git rebase HEAD~1 -i

터미널에서 위 명령어로 직전 commit message를 수정하기 위해 에디터(편집모드)로 들어간다.

➕ 참고사항

위에서의 HEAD~1바로 직전 commit을 수정하고 싶을 경우이고,
좀더 전의 내용을 수정하고 싶다면 HEAD~2, HEAD~3처럼 수정이 필요한 commit이 몇 번째 전인지 고려하고, 그 숫자로 변경해 입력하면 된다.

Step 2. 에디터에서 pickreword로 변경

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를 수정할 시간이 왔다.
두 번의 실수는 없도록 꼼꼼히 확인하며 내용 수정을 마치고,
step 2번에서처럼 esc -> :wq! -> enter로 에디터를 빠져나온다.

여기까지 완료하면 편안해진 마음으로 git push origin 경로로 commit을 push하려 하지만, 붉은 에러 메세지만 반겨줄 뿐 push가 되지 않는다.
원격 저장소의 내용과 로컬 저장소의 내용이 상이해 github가 변경사항을 받아들이지 않기 때문. 성공적인 수정을 위해서 우리는 한 가지 스텝이 더 필요하다.

Step 4. 강제(force) push 수행

git push origin 경로 --force
git push origin 경로 --f

--force (--f로도 표기가능) 명령어는 원격 저장소의 내용이 로컬 저장소의 내용과 일치하도록 원격 저장소의 변경사항들을 강제로 덮어씌운다.
그리고 github를 가보면? 정상적으로 push가 이루어져 있는 것을 볼 수 있다.

💥 주의사항

force 명령어는 검색해보면 절대 사용하지 말라는 내용이 많을 정도로..원격 저장소의 commit들이 유실될 수 있어 굉장히 조심히 사용해야한다. 특히 해당 원격 저장소를 다른 사용자들과 공유하는 상황이라면 사용하지 않는게 좋다. (나는 혼자 수행하는 프로젝트에서 해당 문제가 발생해 사용했다.)
다른 사용자의 작업물에 강제로 덮어쓰기가 이루어져, 다른 사용자들의 작업과 원격 저장소 내용의 연결을 끊는 재앙을 가져올 수 있기 때문. 반드시 잘 알고 사용하자.

profile
일상의 성실이 자존감을 만드는 성취주의자

5개의 댓글

comment-user-thumbnail
2021년 8월 13일

뭔가 git 다루기가 무서운데... 정말 잘 공부하고 하셨네요! 리스펙... 👍
잊지 않고 써먹겠습니다.

1개의 답글
comment-user-thumbnail
2021년 8월 13일

무서운 git....그래도 해보는 게 좋겠죠? 감사합니다!

1개의 답글
comment-user-thumbnail
2024년 10월 3일

이게 가장 좋은 글 같습니다.
에이터 사용할 줄 모르시는 분을 위해 수정 전에, i를 입력해야한다는 말을 넣으시면 퍼팩트한 글이 될거 같습니다.

답글 달기