본문 바로가기

개발/git

git push 하지 않은 상태에서 commit(커밋) 취소

실제 회사에서 업무를 진행하다 보면, 서버에 push 하기 전  commit 내용을 점검할 때가 있다. 그러다보면 누락된 파일이나, 잘못 적용된 소스가 발견 될 떄가 많은데 그때 사용하는 명령어를 기억하기위해 해당 글을 작성하기로 했다.

 

git reset --soft HEAD^

해당 명령어는 서버(git)에 반영(push)하기 전인, commit(커밋)을 취소 하는 명령어다.

서버에 로그는 남지 않는다.

 

아래는 위 명령어에 적용된 옵션 내용이다

 

--soft commit을 취소하고 staged area는 그대로 유지한다.
git add src/index.tsx
git commit -m "test"
git reset --soft HEAD^

위 명령어를 사용 하고 나면 아래와 같은 상태가 된다
(git add가 유지 된 상태로 커밋이 취소가 됩니다.)

*staged area*
src/index.tsx

--hard [ 주의 필요 ]자주 사용할 일 없습니다.

본인이 서버에 반영하지 않은 파일들의 수정 내용까지 전부 삭제합니다.

hard 옵션은 로컬 작업 폴더(내 컴퓨터)를 서버(GIT Repository)의  HEAD^ 시점으로 되돌린다 생각하시면 됩니다.

본인이 나중에 커밋하려고 소중하게 보관한 파일도 제거 되니, 주의하세요

git reflog로 복구는 가능합니다.

HEAD^ 쉽게 말해 가장 최신 커밋을 취소한다 생각하시면됩니다.

git log 명령어를 입력하였을떄 가장 위에 있는 커밋이 취소됩니다.

"^" 특수문자가 최신 커밋을 의미 한다 생각하시면됩니다.

물론 정확하게 commit id를 입력하여 적용할 수도  있습니다.

git reset --soft HEAD 2efasdasdasdasdbef8bbca397df5b4b

commit id는 git log를 통해 알수 있습니다.

git log
commit 2efasdasdasdasdbef8bbca397df5b4b
Author: 김민혁 <mh.kim@xxx>