더북(TheBook)
Q 바로 전이 아닌 특정 시점으로 커밋을 복원하려면 어떻게 해야 하나요?

A 커밋 ID를 이용해서 특정 시점으로 커밋을 복원할 수 있습니다. git log 명령 결과 ‘commit’으로 시작하는 숫자와 문자로 이루어진 행이 커밋 ID입니다. 커밋을 할 때마다 임의의 값으로 이루어진 커밋 ID가 생성됩니다.

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.

commit c6670e59a10c26c1cd60886828ebed78777ffd0a
Author: Shin Jaehun 
Date: Sat Jul 5 17:38:42 2014 +0900

    Added a file resource to testserver.

commit b3963a8811193e092a414b44fa9055a58087e6a4
Author: Shin Jaehun 
Date: Sat Jul 5 17:33:16 2014 +0900

    First commit

HEAD 대신 직접 커밋 ID를 써서 ‘git reset [커밋 ID]’와 같이 명령하면 커밋 ID 이후의 커밋은 취소되고 커밋 ID에 해당하는 커밋은 유지됩니다. 다음 명령은 sshd 모듈을 테스트 서버에 추가했던 커밋(커밋 ID: b40a9f7c14c9acf29722f4ab024335540579d7d8) 이후의 작업을 취소합니다.

shinjaehun@losttemple:/etc/puppet$ sudo git reset b40a9f7c14c9acf29722f4ab024335540579d7d8
Unstaged changes after reset:
M manifests/site.pp

해당 커밋 이후의 작업이 취소된 것을 확인할 수 있습니다. 참고로 명령 결과 작업 디렉터리는 그대로 유지되고, 준비 영역의 내용은 취소됩니다.

shinjaehun@losttemple:/etc/puppet$ git log
commit b40a9f7c14c9acf29722f4ab024335540579d7d8
Author: Shin Jaehun 
Date: Sat Jul 5 17:40:58 2014 +0900

    Added sshd module to testserver

commit c6670e59a10c26c1cd60886828ebed78777ffd0a
Author: Shin Jaehun 
Date: Sat Jul 5 17:38:42 2014 +0900

    Added a file resource to testserver.

commit b3963a8811193e092a414b44fa9055a58087e6a4
Author: Shin Jaehun 
Date: Sat Jul 5 17:33:16 2014 +0900

    First commit
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.