ice rabbit programming

[Git] reset으로 add, commit 취소하기 본문

Development/Git

[Git] reset으로 add, commit 취소하기

판교토끼 2021. 6. 16. 23:27

Git에서 취소하고 싶은 경우는 생각보다 자주 있다. 이 때 사용하는 것이 reset 명령어이다.

add 취소하기

기본적으로 git에서 파일들은 unstaged 상태에 있고, git add 명령어를 통해 stage에 올린다. 이는 commit 이전에 임시로 올리는 공간이라고 생각하면 된다. add를 취소하기 위해서는 다음 명령어를 입력하면 된다.

git reset HEAD \[optional : 파일명\]

만약 파일명을 입력하지 않으면 올라갔던 파일 전체가 내려온다. (주의 : rm 명령어는 add의 반대가 아니다! git에서 이 파일을 제거한다는 의미이다.)

 

commit 취소하기

add로 추가한 파일들은 git commit 명령어로 commit한다. commit을 되돌리고 싶은 경우는 commit 자체가 잘못되었거나, 메시지를 수정하고 싶은 경우이다. 혹시 변경 사항을 이 commit 단위에 더 많이 적용하고 싶을 때에는 squash하는 것도 한 방법이다.

어쨌거나, 우선 메시지만 잘못 입력한 경우에는 다음 명령어로 메시지를 수정할 수 있다.

git commit --amend

다음으로 커밋을 취소하고 싶은 경우에는, 위에서 사용한 reset을 사용하면 된다.

git reset --soft HEAD^ // 커밋을 취소하고 파일은 stage에 보존  
git reset --mixed HEAD^ // 커밋을 취소하고 파일은 unstage에 보존(옵션 없을 경우 디폴트 동작)  
git reset --hard HAED^ // 커밋을 취소하고 파일 변경 상태도 파기

 

참고

가로 git reset --hard 를 사용하면 원격 저장소의 마지막 커밋 상태로 돌아간다. 즉, add했건 아니건 변경 상태가 모두 날아간다. 정말 필요없는 게 아니면 stash를 사용하는 것도 방법이다.

마지막으로 이미 push한 commit을 취소할 경우에는 강제로 push해주어야 한다.

git push -f  
git push origin +master

위 명령어 두 가지는 강제로 push하는 동작을 하게 한다.