git을 사용하다 보면, 그동안 작업하면 수정 내역을 완전히 초기화,
즉, 처음 git clone 내려받은 원본 상태로 되돌리고 싶은 경우가 있습니다.

물론 그냥 간단하게 다시 git clone을 수행하면 원본 소스를 얻을 수 있지만
소스 용량이 크거나 인터넷이 느린 특수한 환경에서 전체 소스를 git clone으로 다시 내려받지 않고
기존에 작업하던 소스를 재활용하여 초기화가 필요한 상황이 있을 수 있습니다.

$ git status

Changes not staged for commit:
... modified: ...​                            <-- 수정된 파일들

Untracked files:
...                                            <-- 새롭게 추가된 파일 및 디렉토리

git status 명령으로 확인했을때 빨간색으로 표시되는
"Changes not staged for commit:" 나 ​"Untracked files:" 들을 삭제하고 싶은 상황입니다.

 

< 1차 초기화 : reset 명령 >

$ git reset --hard

git reset 명령을 수행하면 "Changes not staged for commit:" 리스트의 모든 변경사항이 제거됩니다.
하지만 기존 파일의 diff 내역만 삭제되고, 새롭게 추가된 파일이나 디렉토리는 아직 그대로 남아있습니다.

 

< 2차 초기화 : clean 명령 >

$ git clean -fd

clean 명령에 -f 와 -d 옵션을 추가해 주면 "Untracked files:" 에 해당하는 파일과 디렉토리가 모두 삭제됩니다.
파일만 삭제하고 싶다면 -f, 디렉토리만 삭제하고 시다면 -d 옵션을 분할해서 사용해도 됩니다.

 

< 결론 >

git reset --hard 와 git clean -fd 명령 2개면, git 변경사항을 완전히 git clone 초기 상황으로 되돌릴 수 있습니다.
단! 위 명령을 수행해서 초기화된 경우, 변경사항을 다시 되살리는건 불가능하니 사용에 주의하시기 바랍니다.

 

END

 

+ Recent posts