더북(TheBook)

커밋 복원하기

다시 매니페스트 파일 manifests/site.pp를 vi로 열어서 테스트 서버 노드에 danger_module을 추가합니다.

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

이번에는 danger_module이 테스트 서버에서 잘 작동한 상황을 가정해봅시다. 매니페스트 파일을 준비 영역에 추가하고 커밋합니다.

shinjaehun@losttemple:/etc/puppet$ sudo git add manifests/site.pp
shinjaehun@losttemple:/etc/puppet$ sudo git commit -m 'Added danger_module to testserver.'
[master 3316f18] Added danger_module to testserver.
1 file changed, 1 insertion(+)

git log로 확인해보니 작업 내역이 제법 복잡해졌습니다.

shinjaehun@losttemple:/etc/puppet$ git log
commit 3316f1874cd768b4f8f2b69ae9975be7c996e86d
Author: Shin Jaehun 
Date:   Sat Jul 5 18:07:48 2014 +0900

    Added danger_module to testserver.

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
(END)
이렇게 하세요!

마지막에 q를 눌러 명령 프롬프트로 돌아올 수 있습니다.

danger_module에 문제가 있다는 사실을 뒤늦게 발견하고 커밋을 취소하려고 합니다. 이때 커밋은 취소하지만, 변경한 내용은 그대로 놔두고 싶습니다. 왜냐하면 변경한 내용을 보완해서 다시 커밋할 수 있기 때문입니다. HEAD라는 지시자Pointer를 사용해서 쉽게 해결할 수 있습니다. HEAD는 현재 작업 중인 가지를 가리키는 지시자입니다. 기본적으로 HEAD는 master를 가리키는 상태입니다. 그림으로 나타내면 그림 11-9와 같습니다.

그림 11-9 master를 가리키는 HEAD 지시자
Tip

앞에서 git checkout 명령으로 작업 중인 가지를 변경했는데 이렇게 하면 HEAD는 변경된 가지를 가리키게 됩니다.

git reset은 커밋을 복원하는 명령입니다. 복원할 지점을 명시해야 하는데 HEAD^는 master를 현재 커밋 하나 전(HEAD = HEAD - 1)으로 가리키게 합니다.

shinFhun@losttemple:/etc/puppet$ sudo git reset HEAD^
Unstaged changes after reset:
M manifests/site.pp
Tip

‘git reset HEAD^’는 ‘git reset HEAD~1’ 명령과 동일한 결과를 보여줍니다.

git log로 확인해보면 최종 커밋 ID는 788d8dc로 마지막 커밋(3316f18) 이전으로 복원되었습니다.

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.
...
Tip

‘git reset HEAD^’는 바로 이전 커밋으로 되돌리는 ‘git reset HEAD~1’ 명령이었다면, ‘git reset HEAD^^’는 ‘git reset HEAD~2’, 최신 커밋 하나 전(HEAD = HEAD - 2)으로 되돌리는 명령입니다.

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