$ git reset --hard 가고싶은커밋ID
git reset을 통해 HEAD가 과거의 커밋을 가리키게 할 수 있다. working directory의 내용도 과거 커밋의 모습으로 돌아가게 된다. 즉, 과거 커밋으로 아예 돌아가고 싶을 때 사용된다.
$ git reset --soft 커밋ID
$ git reset --mixed 커밋ID
$ git reset --hard 커밋ID
--hard 옵션은 권장하지 않는다. 만약 모든 영역에서 사라져도 상관 없을 경우만 --hard 옵션을 사용하길 바란다.
git reset을 사용할 때 매번 커밋ID를 찾아 사용해야 하는 불편함이 있을 수 있다. 사실 커밋ID 자리에 다른 걸 작성해도 된다. 전에 설명했듯이 HEAD는 가장 최근 커밋을 가리킨다고 했다. 만약 가장 최근 커밋 바로 이전 커밋으로 돌아가고 싶을 때는 아래처럼 작성해도 된다.
$ git reset --hard HEAD^
HEAD^는 현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋을 나타낸다. 만약 바로 이전보다 좀더 이전에 있는 커밋을 나타내고 싶다면 아래와 같이 작성하면 된다.
$ git reset --hard HEAD~2
HEAD~2는 현재 HEAD가 가리키는 커밋보다 2단계 전의 커밋을 나타내는 의미이다. 즉, HEAD~x는 현재 HEAD가 가리키는 커밋보다 x단계 전에 있는 커밋을 말한다.
커밋을 할 때 해당 커밋에 관한 정보를 커밋 메시지로 남겼다. 그런데 커밋 중에서는 다른 걸들보다 좀더 중요한 의미가 있는 커밋들도 있다. 이런 중요한 커밋에는 커밋 메시지뿐만 아니라 태그(tag)라는 것을 추가적으로 달기도 한다.
보통 프로젝트에서 주요 버전의 시작점이 되는 커밋에 이렇게 택그를 단다. 예를 들어 아래 그림에서 첫 번째 커밋에는 Version 1이라는 태그를 달고, 여섯 번째 커밋에는 Version 2라는 태그를 달고 싶다고 가정해보자.
# git bash [태그이름] [커밋ID]
$ git tag Version_1 84ab
$ git tag Version_2 9a69
$ git tag # 태그 조회하기
만약 각 태그와 연결된 커밋이 보고 싶을 때는 아래와 같이 git show를 사용하면 된다.
$ git show [태그이름]
git log : 커밋 히스토리를 출력한다.git log --pretty=oneline : --pretty 옵션을 사용하면 커밋 히스토리를 다양한 방식으로 출력할 수 있다. --pretty 옵션에 oneline이라는 값을 주면 커밋 하나당 한 줄씩 출력해 준다.git show [커밋ID] : 특정 커밋에서 어떤 변경사항이 있었는지 확인한다.git commit --amend : 최신 커밋을 다시 수정해서 새로운 커밋으로 만든다.git config alias.[별명] [커맨드] : 길이가 긴 커맨드에 별명을 붙여서 이후로 별명으로 해당 커맨드를 실행할 수 있도록 설정한다.git diff [커밋A ID] [커밋B ID] : 두 커밋 간의 차이를 비교할 때 사용된다.git reset [옵션] [커밋ID] : 옵션에 따라 하는 작업이 달라진다. 옵션을 생략하면 --mixed 옵션이 적용된다.--soft--mixed--hardgit tag [태그이름] [커밋ID] : 특정 커밋에 태그를 붙일 때 사용된다.