HEAD
현재 내가 위치해있는 커밋을 가르키는 식별자
아래 처럼 보통 커밋을 가르킬 때에는 HEAD가 간접적으로 브랜치를 통하여 가리키게 된다.
$ git log --pretty=oneline
0357e6a6d5f0c849f5834b50e6dd0861098e0ede (HEAD -> main, origin/main) [UPD]: 포스팅 업데이트
HEAD가 main 브랜치를 통해 [UPD]: 포스팅 업데이트 커밋을 가리키고 있음
커밋 되돌리기
git reset의 세 가지 옵션
git reset [옵션] eea5 | working directory | staging area | repository |
---|---|---|---|
--soft | 안 바뀜 | 안 바뀜 | HEAD가 eea5 커밋을 가리킴 |
--mixed | 안 바뀜 | eea5 커밋처럼 바뀜 | HEAD가 eea5 커밋을 가리킴 |
--hard | eea5 커밋처럼 바뀜 | eea5 커밋처럼 바뀜 | HEAD가 eea5 커밋을 가리킴 |
git reset 써보기
아래와 같은 세 개의 커밋 로그가 있을 때,
commit 0357e6a6d5f0c849f5834b50e6dd0861098e0ede (HEAD -> main, origin/main)
Author: JaehyoJJang <yshrim12@naver.com>
Date: Thu Mar 9 12:38:45 2023 +0900
세번째 커밋
commit 11736c40b0e46abf64605862c57891781e5d71ba
Author: JaehyoJJang <yshrim12@naver.com>
Date: Thu Mar 9 12:30:02 2023 +0900
두번째 커밋
commit ee6993ef6877cdd9c967969f587922f4e22bfed6
Author: JaehyoJJang <yshrim12@naver.com>
Date: Thu Mar 9 12:23:31 2023 +0900
첫번쨰 커밋
현재 HEAD를 기준으로 두 번째 커밋으로 이동해보자
$ git reset --hard 11736c40b0e46abf64605862c57891781e5d71ba
다시 커밋 로그 출력
$ git log --pretty=oneline
commit 11736c40b0e46abf64605862c57891781e5d71ba
Author: JaehyoJJang <yshrim12@naver.com>
Date: Thu Mar 9 12:30:02 2023 +0900
두번째 커밋
commit ee6993ef6877cdd9c967969f587922f4e22bfed6
Author: JaehyoJJang <yshrim12@naver.com>
Date: Thu Mar 9 12:23:31 2023 +0900
첫번쨰 커밋
HEAD^ 옵션
$ git reset --soft HEAD^
- HEAD^ : 이전 커밋으로 되돌림
git reflog
reset --hard 옵션을 사용해서 커밋을 되돌린다고 해서, 해당 커밋 이후에 커밋된 파일들이 사라지지는 않음
$ git reflog
reflog 옵션을 사용하여 HEAD가 가리켰던 전체 커밋 현황을 알 수가 있다.
0357e6a (HEAD -> main, origin/main) HEAD@{0}: commit: [UPD]: 포스팅 업데이트
11736c4 HEAD@{1}: commit: [UPD]: 포스팅 업데이트
ee6993e HEAD@{2}: reset: moving to HEAD
ee6993e HEAD@{3}: reset: moving to HEAD^
527697c HEAD@{4}: commit: test
ee6993e HEAD@{5}: commit: [ADD]: 포스팅 생성
위에 보면 HEAD@{N} 로 되어있는데 이 N 숫자가 작을수록 최근에 HEAD가 기리켰던 commit을 의미함.
git reset 요약
- --soft: HEAD는 첫번째 커밋을 가리킴
- 하지만 staging area와 working directory는 기존의 커밋으로 유지
- --mixed: soft 옵션에서 staging area도 함께 첫번째 커밋으로 변경
- --hard: mixed 옵션에서 working directory도 첫번째 커밋 상태로 변경
- 사용할 때 조심 (현재 커밋에서 작업하던 파일 다 날라감)