[GitHub] 원격 저장소에 올라간 커밋 강제로 삭제하기
Problem
깃헙 원격 저장소에 커밋을 push했는데, 이후에 해당 커밋을 잘못 올린걸 알게 되어서 원격 저장소에서 삭제하고 싶다.
Github에 커밋을 올리기 전과 완전히 동일한 상태로 되돌려 놓으려면 어떻게 해야할까?
Solution: 로컬에서 커밋을 되돌린 후 Github에 강제로 푸시
원격 저장소에서 삭제하고 싶은 커밋을 로컬 저장소에서도 삭제해서 이전 커밋히스토리로 되돌리고, 이 커밋 히스토리를 원격 저장소에 강제로 push하면 된다.
로컬에서 내가 되돌리고 싶은 커밋으로 되돌린다. HEAD
1는 최신 커밋 1개, HEAD2는 최신 커밋 2개이다.git reset --hard HEAD~1
force push로 깃헙에 강제로 push한다.
git push -f origin master
원격 저장소의 커밋보다 뒤쳐져있는 과거의 로컬 저장소의 커밋 히스토리를 푸쉬하게 되므로 만약 그냥 git push origin master
을 하면 에러가 발생한다. 하지만 우리는 이 뒤쳐져 있는 로컬 저장소의 커밋 히스토리를 원격 저장소의 커밋 히스토리로 강제로 덮어씌워야 하므로 강제를 의미하는 -f
또는 --force
를 명령어에 추가해야 한다.
하지만 이 방법은 원격 저장소에 내가 만들었던 커밋을 깔끔하게 삭제할 수는 있지만, 원격 저장소에서 삭제되기 전에 다른 사람이 해당 브랜치의 커밋을 pull로 땡겨갔다면 그 사람의 로컬 저장소에는 내가 삭제한 커밋이 남아있다게 된다는 문제가 있다. 그 커밋들이 원격 저장소에서 삭제된걸 모르는 상태에서 내가 삭제한 커밋에 그 사람이 새로 작업한 커밋들을 추가해서 함께 push를 하면 내가 삭제했던 커밋까지 다시 원격 저장소에 올라오게 된다.
그러므로 이 방법은 해당 브랜치를 나 혼자 작업할 때만 사용하는 것이 좋을 것이다.