지난 글에서 Git을 설치하고 처음으로 커밋을 했다. 커밋은 현재의 상태를 기록해두는 것이라고 했는데, 그러면 이 커밋의 내용을 어떻게 확일할 수 있을까? 착하게도 Git은 우리가 커밋하는 내용들을 일일히 기록해두고 있다. 물론 커밋뿐 아니라 더 있지만
터미널을 열고 아래와 같이 Git이 기록하고 있는 로그를 검색해보자.
$ git log
그럼 위 사진과 같이 우리가 작성한 커밋 메세지를 로그를 통해 볼 수 있다. commit이라는 단어 옆에 붙어있는 온갖 이상한 암호문 같은 것은 commit id라고 불리는 문자열이다. 이 문자열을 통해서 Git은 commit의 순서를 구분한다.
커밋을 한 개만 하면 Git을 사용하는 의미가 없으니, 여러 번 커밋해보자. 이전에 일단 시작하는 Git(2) 에서 본 것처럼 커밋을 진행할 것이다.
그 전에! 텍스트 에디터인 Vim의 사용법을 알아야한다.
명령 모드 : 입력하는 모든 키를 명령으로 수행
명령줄 모드 : ':(콜론)' 프롬포트에 명령문을 입력하거나 /프롬포트에 단어 입력
입력 모드 : 입력하는 모든 키를 문서의 작성에 사용
비주얼 모드
아마 Linux/Unix 계열에서 터미널을 사용하는 사람들은 한번 쯤 들어봤을 Vim은 텍스트 에디터의 일종이다. 터미널을 사용할 때 자주 쓰는 에디터이므로 명령문과 사용법들을 익혀두면 좋다. 우리가 쓸 명령문은 많지 않으니까 아래와 같이 따라해보면 된다.
# vim 파일명 -> 해당 파일을 Vim으로 실행
$ vim dinosaur.txt
vim을 통해 dinosaur.txt 파일을 열면 위와 같이 아무것도 안 보인다. 당연하겠지만 dinosaur.txt 파일에 내용을 작성한 적이 없기 때문에 아무 내용도 보이지 않는다. 처음 vim을 다뤄보는 이 화면에서 어떻게 해야할지 몰라 아무키나 누르게 되는데, 일단은 ‘i’를 눌러서 입력 모드(insert mode)로 들어가면 된다. 그럼 아래와 같이 터미널 하단에서 현재 입력 모드로 들어갔다는 걸 볼 수 있다.
입력 모드로 들어간 뒤 내용을 입력한 다음, ‘ESC’를 눌러서 입력모드에서 다시 일반 모드로 돌아간다. 여기선 다시 글을 입력하려고 해도 안되는 것을 알 수 있다.
저장하고 나가기 위해서는 명령줄 모드로 들어가야 하는데, 들어가는 방법은 ‘:(콜론)’을 입력하고 wq를 적으면 된다.
터미널에 cat이나 vim 명령어를 통해 파일을 확인해보면 아래와 텍스트가 잘 입력된 것을 볼 수 있다.
Vim 사용법을 알았으니 이제 파일들을 수정하면서 계속 커밋 해보겠다.
커밋할 때 순서는 보통 Working Tree에 있는 파일을 전부 add하고, 메세지와 함께 커밋하면 된다. (현재 Git의 파일 상태가 궁금하면 ‘git status’를 사용하면 된다.)
$ git add -A
$ git commit -m “두 번째 커밋. 둘리가 작성함”
vim을 이용해서 baby.txt와 git.txt파일을 수정하고 커밋했다.
희동이가 화가났는지 둘리의 dinosaur.txt를 멋대로 수정했다!
지금까지 커밋한 내용들을 로그로 보면 위와 같다. 네 번째 커밋은 희동이가 실수(?)를 한 것으로 보이기 때문에, 이전에 기록한 세 번째 커밋 상태로 돌아가야 한다. 세 번째 커밋 상태로 돌아가면 희동이가 dinosaur.txt파일에 멋대로 작성한 내용도 삭제되고 다른 파일들도 수정됐다 하더라도, 이전의 상태로 돌아갈 것이다. 이 때 사용할 수 있는게 Git의 타임머신 기능이다.
Git에서 이전 커밋들로 돌아가는 기능은 바로 ‘reset’이다. (‘revert’라는 것도 있지만 지금은 논외로 한다.) 문법은 아래와 같다.
$ git reset —hard (commit_id)
이전의 커밋으로 돌아가려면 당연하지만 commit id를 입력해줘야 한다. 로그에 나와있는 commit id를 복사한 뒤 위 문법과 합쳐서 터미널에 입력하면
이렇게 세 번째 커밋으로 돌아갔다고 나온다.
dinosaur.txt 파일을 확인해보면 희동이가 작성한 부분은 사라지고, 둘리가 작성한 내용만 남아있는 것을 알 수 있다.
다음 시간에는 이 타임머신 기능을 좀 더 다양하게 사용해볼 것이다.