Date:     Updated:

카테고리:

태그: ,


나는 주로 로컬에서 작업을 하고 원격으로 push를 한다. 그런데 로컬에서 작업한 것을 commit하고 push까지 했는데 되돌리고 싶다면 어떻게 해야 할까? 일반적인 reset 방식을 썼다간 오류가 날 것이다.


우선 reset을 하기 위해 log을 확인해야 할 것이다.

$ git log
commit 7dae1ea99bf18943390503298653448fb25f4c22 (HEAD -> master, origin/master, origin/HEAD)
Author: heestogram <anthjoon11@naver.com>
Date:   Thu Nov 17 20:05:15 2022 +0900

    no emoji

commit 7d84f0cede8ff5140bf00fd05fbb364809bb9ea6
Author: heestogram <115082062+heestogram@users.noreply.github.com>
Date:   Thu Nov 17 16:57:50 2022 +0900

    Update about-me.md

나는 no emoji 커밋을 취소하고 싶다. 때문에 그 전 커밋의 로그를 복사해서 reset한다.

$ git reset --hard 7d84f

그리고 나선 원격에 push를 하면 다음과 같은 오류가 날 것이다.

! [rejected]          master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/heestogram/heestogram.github.io.git'

오류의 원인은 이렇다. 현재 원격 저장소는 로컬의 commit으로 인해 no emoji 단계까지 와있다. 그런데 로컬 저장소가 대뜸 no emoji를 취소하고 전 단계로 가버렸으니, 뒤처져있는 로컬 입장에선 push를 할 수 없는 것이다.


이 경우엔 로컬의 커밋 히스토리를 원격에 강제로 덮어씌우는 명령어를 입력해야 한다. 다음과 같이 push 뒤에 -f를 입력하면 된다.

$ git push -f