본문 바로가기
IT 개발

[GIT & GITHUB] git 이전으로 돌아가기 (add, commit 취소)

by gorokeya 2021. 5. 4.


저번 포스팅에서 add, commit을 하는 방법을 알았으니 이번엔 내가 작업했던 시점의 이전
(add, commit, push하기 이전) 으로 돌아가는 방법을 작성해 보려 한다



저번에 작성했던 index파일은 내버려 두고 새로운 index2.html 파일을 만들었다



우선 파일을 새롭게 하나 만들었으니 git add를 해주고
git status로 현재 git 저장소의 상태를 보니 하단에 new file이라며 새로운 파일을
감지했다는 걸 알 수 있다.




그런데 갑자기 git add한 내용을 취고 하고 수정해서 다시 add하고 싶어졌다면?

git reset HEAD [파일명] 을 작성하여 git add취소가 가능하다
후에 git status를 다시 보니 Untracked file이라며
add가 제대로 취소된 것을 확인 가능하다.




이제 git 명령어를 이용하여 commit을 취소하는 대표적인 3가지 방법과
취소했던 내용을 취소하는(취소했던 내용을 되살리는) 방법을 알아볼 것이다.

우선 index2 파일에 새로운 내용으로 <p>1~5까지를 작성하여 변경사항을 주었다.




위의 작성한 내용을 저장하고자 add, commit을 했고
status를 확인해보니 나의 작업 내역과 add, commit내역이 모두 동일하여
(가장 최신의 업데이트 상태)
woking tree가 클린 하다고 나와있다.




그리고 git log로 커밋 목록을 보니 잘 되어있는 걸 확인할 수 있다.


계속 작업하다 보면 여러가지 이유에서 commit을 취소하고 싶은 경우가 분명 생길텐데,
방법은 크게 3가지로 나누어져 있다.

git reset --hard
git reset --mixed (디폴트 값)
git reset --soft

이렇게 3가지가 존재하는데 하나씩 설명해 보려한다.


위에선 먼저 git reset --hard HEAD^ 를 이용했고
밑에 HEAD is now at ~ 하면서 HEAD가 이전 커밋목록이었던 index2.html로 넘어갔다.




reset --hard 옵션을 사용하고 다시 파일로 가보니까
아까 있었던 <p>1~5가 사라져있다.
hard, mixed, soft란 뜻에서도 느껴지듯이 hard는 가장 세게(?) 취소하는 단계로
commit,add한 내역과 우리가 작성했던 working directory 내용 모두 취소해버린다.




만약 reset --hard를 취소하고 처음 add, commit 내역을 되살리고 싶다면?
git reset --hard ORIG_HEAD를 작성하면 다시 되살아난다.




위처럼 hard ORIG_HEAD 명령어를 이용하고 다시 파일을 확인해보니
<p>내용이 working directory에 다시 나타난 것을 볼 수 있다. (add, commit도 같이 되어있는 상태)




두 번째 commit 취소 옵션에는
git reset --mixed HEAD^ 가 존재한다. 이는 가장 기본적으로 설정되어 있는 디폴트 값이라
사실 --mixed를 빼고 git reset HEAD^ 로만 작성해도 된다.


mixed 옵션 후 상태를 보면 working directory는 변함없고 (작성했던 <p>내용이 그대로 있다.)
add, commit만 취소 된 상태라는 걸 알 수 있다.




마지막 취소 옵션으로 git reset --soft HEAD^ 명령어를 사용하고
status로 git의 현재 상태를 확인해보니
working directory, add 내역은 남아있고 commit만 취소되었다는 걸 알 수 있다.



취소 명령어를 사용했다가 다시 이전으로 돌아가고 싶다면
위에서 git reset --hard ORIG_HEAD를 사용했던 것 처럼, ORIG_HEAD를 이용하여
쉽게 되돌아가기가 가능하다.

반응형