본 포스팅은 Git- 깃허브(github) 알아보기!와 이어집니다!
이번에는 커밋에 관련된 유용한 명령어를 알아 보겠습니다!
커밋 히스토리 보기
git log 명령어는 이때까지 사용자가 한 커밋에 대한 기록을 모두 보여줍니다.
이 때 커밋을 구분하기 위해 id(커밋 해시)를 붙여서 관리합니다.
필자는 앞 포스팅에서 커밋을 총 2번 진행했습니다.
따라서 각각의 커밋에 대한 정보를 확인할 수 있습니다.
커밋에 대한 정보는 (커밋 해시,저자 이름, 커밋 날짜, 커밋 메시지 등)에 해당합니다.
커밋 해시는 위 이미지에서 ‘b3f8~’부분에 해당하며, 가장 최근에 한 커밋이 가장 위쪽에 있습니다.
만약 정보를 간략하게 알고 싶으면 ‘–pretty=oneline’이라는 옵션을 사용하면 됩니다!
한 커밋의 기록만 보고 싶으면 git show [커밋해시] 명령어를 사용합니다.
git show 명령어를 사용하면 이전 커밋과 비교하는 내용까지 출력합니다.
필자의 경우 hello.py파일에서 print함수가 일치하지 않다고(변경됐다고) 나왔습니다.
만약 비교하려는 커밋을 지정하고 싶으면 git diff [커밋해시] [커밋해시] 명령어를 사용하면 됩니다!
커밋 메시지 수정하기
커밋을 하고 나서 커밋 메시지를 수정하고 싶은 경우가 있습니다.
이런 경우 commit 명령어에서 ‘–amend’옵션을 추가하면 됩니다!
이 때 수정되는 커밋은 가장 최근 커밋입니다.
자세하게 말하면 HEAD가 가리키는 커밋이며, HEAD에 대한 설명은 아래에서 진행합니다.
명령을 실행하면 아래와 같이 화면이 바뀌게 됩니다.
이 화면은 리눅스의 vi에디터와 동일합니다.
vi에디터를 모르시는 분들은 텍스트 편집이 안 돼서 당황할 수 있습니다.
이럴 때는 ‘a’를 입력해서 vi에디터를 -Insert- 모드로 변경하면 편집이 가능합니다.
편집을 다 하셨으면 esc를 누르고 ‘wq’를 입력해서 빠져 나옵니다.
필자는 ‘hello -> helllo’라는 커밋 메시지에서 ‘hello -> helllo program’이라는 메시지로 수정하였습니다.
이후 git log 명령을 통해 커밋을 확인하였습니다.
커밋 메시지 뿐 만 아니라 ‘b3f8’이였던 커밋 해시가 ‘e2f0’으로 수정되었습니다.
–amend옵션을 사용하면 새로운 커밋(e2f0)에 기존 커밋(b3f8) 내용을 모두 복사한 뒤 커밋 메시지를 수정한다고 생각해도 무방합니다.
명령어를 간단하게 바꾸고 실행하기
명령어를 입력하다 보면 너무 길어서 번거로운 경우가 있습니다.
이럴 때는 config alias라는 명령어를 사용하면 됩니다.
아래 그림은 alias명령어의 사용 방법입니다.
이제 git history명령어를 실행하면 git log –pretty=oneline이 실행됩니다.
커밋 태그를 등록해서 간편하게 사용하기
커밋 해시는 무작위의 영어+숫자 조합이라 금방 잊기 쉽습니다.
이럴 때는 git tag라는 명령어를 사용해서 커밋 태그를 등록하면 됩니다.
이 명령어는 git tag (커밋 태그) (커밋 해시)로 입력합니다.
아래 이미지는 커밋 태그를 등록하고 diff 명령어를 사용한 결과입니다.
git diff 뿐 만 아니라 모든 명령어에서 (커밋 해시)대신 (커밋 태그)를 사용할 수 있습니다!
만약 태그를 삭제하고 싶으면 git tag -d (커밋 태그)를 입력하면 됩니다.
HEAD의 개념 및 HEAD 수정 (리셋)
커밋 히스토리를 보면 위와 같이 HEAD라는 문구를 확인할 수 있습니다.
HEAD는 가장 최근에 한 커밋의 포인터입니다.
이 HEAD는 git reset 이라는 명령어로 수정할 수 있습니다.
즉 다른 커밋을 가리키도록 조정할 수 있습니다.
그러나 강제로 HEAD를 수정할 때는 신중해야 합니다.
이전 커밋으로 HEAD를 수정하라는 명령을 하면, git은 이전 커밋을 ‘가장 최근에 한 커밋’으로 만들어 버립니다.
즉 이후의 커밋은 의미 없다고 판단하고 아래 그림처럼 (ver_1)이 history에서 사라집니다.
다만 커밋 자체가 사라지는 것은 아닙니다.
커밋 해시나 커밋 태그를 기억한 뒤 git reset을 실행하면 원상 복귀가 됩니다.
다만 이를 잊어버린 경우, 복구는 불가능합니다.
그리고 git reset에는 세 가지 옵션이 있습니다.
각 옵션에 대한 기능은 아래 표를 참고해주세요!
아래는 예시입니다.
hard옵션을 사용했기 때문에 Working Directory와 Staging Area에 위치한 hello.py파일의 내용이 수정되었습니다. (ver_0의 상태)
만약 mixed나 soft 옵션을 사용했다면 Working Directory의 hello.py파일은 변동이 없습니다.
즉 head를 수정하는 reset명령어로 버전 관리를 할 수 있습니다!
(git reset: HEAD를 수정하고 옵션에 따라 프로젝트 내용을 변경하는 명령어)
git reset 편하게 하기
git reset –hard HEAD^ 처럼 입력하면 이전 커밋으로 리셋합니다.
git reset –hard HEAD~2 로 입력해도 같은 기능을 수행합니다.
이를 응용해서 git reset –hard HEAD~3 을 입력하면 이전의 이전 커밋으로 리셋합니다.
사실 HEAD와 reset명령어를 제대로 이해하려면 ‘브랜치’의 개념이 필요합니다.
다음 포스팅은 ‘브랜치’에 대해 살펴보겠습니다.
감사합니다!
Git에 관한 게시물은 CodeIt의 강의 내용을 정리한 글입니다. 강의 이미지나 내용 자체를 업로드하지는 않습니다!!