더북(TheBook)

이번에는 커밋도 삭제하고 danger_module을 추가하는 작업 내용도 모두 날려버리고 싶습니다. 이럴 때는 git reset 명령에서 --hard 옵션을 추가합니다.

shinjaehun@losttemple:/etc/puppet$ sudo git reset --hard HEAD^
HEAD is now at 788d8dc Added sshd module to whole systems

가장 나중에 한 커밋을 취소하는 점은 동일합니다.

shinjaehun@losttemple:/etc/puppet$ git log
commit 788d8dcfb9eec1fbca6a82dde19d186f73eb55ef
Author: Shin Jaehun 
Date: Sat Jul 5 17:42:43 2014 +0900

    Added sshd module to every systems.

commit b40a9f7c14c9acf29722f4ab024335540579d7d8
Author: Shin Jaehun 
Date: Sat Jul 5 17:40:58 2014 +0900

    Added sshd module to testserver.
...

하지만, 작업 디렉터리와 준비 영역의 모든 작업도 취소한다는 점이 다릅니다. 매니페스트 파일 manifests/site.pp를 살펴보면 테스트서버 노드에 danger_module을 삽입했던 행이 삭제된 상태입니다.

node 'vm01.linuxmaster.com' {
   file {'/tmp/testserver':
         content => "This is a test server.\n",
   }
   include sshd
}

작업 디렉터리도 비어 있는 상태입니다.

shinjaehun@losttemple:/etc/puppet$ git status
# On branch master
nothing to commit (working directory clean)

git reset --hard 명령에 의해 커밋이 복원되고 작업 디렉터리, 준비 영역의 모든 내용이 삭제됩니다. 즉, 이전 커밋이 끝난 상태 바로 후로 되돌아간다고 볼 수 있습니다(그림 11-11).

그림 11-11 git reset --hard로 커밋 복원
이렇게 하세요!

git reset -hard [커밋 ID]와 같이 옵션으로 커밋 ID를 넣으면 작업 디렉터리와 준비 영역의 변경 내용이 취소되며 커밋 ID 이후의 커밋도 취소됩니다.

shinjaehun@losttemple:/etc/puppet$ sudo git reset --hard 59f98eed718974d262bf3bd426f119463093c018
HEAD is now at 59f98ee Added sshd module to testserver.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.