Profile picture

[Git] Git HEAD , 커밋 되돌리기 (reset)

JaehyoJJAng2022년 03월 02일

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도 첫번째 커밋 상태로 변경
    • 사용할 때 조심 (현재 커밋에서 작업하던 파일 다 날라감)

Loading script...