본문 바로가기
개발자 꿈나무/Git

특정 커밋 시점으로 돌아가고 싶을 때(git reset)

by ♥︎해이나♥︎ 2022. 11. 9.
반응형

과거에 했던 커밋으로 내용을 되돌리고 싶을 때 어떤 커맨드를 사용해야 하는지 알아보자.

특정 커밋 시점으로 되돌릴 때는 git reset

특정 시점의 커밋으로 되돌릴 때는 아래와 같은 커맨드를 사용한다.

 

git reset --hard 돌아가고 싶은 시점의 커밋 아이디값(4자리)

 

--hard 옵션을 사용한 git reset은 특정 시점으로 리셋하고 나면 이후의 작업 내용은 모두 사라지게 된다. 그렇기 때문에 신중하게 써야하는 명령어이며, 옵션은 총 3가지가 있는데 이 부분도 매우 중요한 부분이라 이 포스팅을 끝까지 읽기를 바란다. 그럼 예제를 통해서 알아보도록 하겠다. 먼저 git history 명령어를 사용하여 아직까지 한 커밋 리스트를 확인해 보았다.

 

 

HEAD가 가장 마지막에 한 Re_update commit_text.txt 커밋을 가리키고 있다. 참고로 현재 HEAD가 가리키고 있는 커밋 버전은 (HEAD -> main) 표시를 통해서 확인이 가능하다.

 

 

나는 git reset --hard 161d를 입력하여 바로 이전 커밋으로 되돌려 보았다. 다시 커밋 리스트를 실행하면 가장 최근의 커밋 내용은 사라지고, HEAD가 161d로 시작하는 Create "Commit_text.txt" 커밋을 가리키고 있는 것을 알 수 있다.

 

 

git reset 옵션(--soft, --mixed, --hard)

git reset을 사용할 때에는 3가지 옵션을 선택하여 쓸 수 있다. git에는 세가지 작업 영역(working directory, staging area, repository)이 있는데, 이 작업영역의 상태가 위의 어떤 옵션을 사용하느냐에 따라 달라진다.

 

※ 세가지 작업영역을 확인하고 싶다면 아래 링크 클릭

2022.09.05 - [개발자 꿈나무/Git] - Git의 세가지 작업영역(Working Directory, Staging Area, Repository)

 

Git의 세가지 작업영역(Working Directory, Staging Area, Repository)

Git의 작업영역을 자세히 살펴보면 크게 3가지로 구분된다. 앞으로 Git을 이용해서 버전 관리를 하려면 이 개념을 반드시 이해하고 있어야 한다. Working Directory Git으로 관리하도록 지정된 디렉토리

heinafantasy.com

 

git reset [옵션] 커밋아이디값 Working Directory Staging Area Repository
--soft 안 바뀜 안 바뀜 HEAD가 해당 커밋 가리킴
--mixed 안 바뀜 해당 커밋처럼 바뀜 HEAD가 해당 커밋 가리킴
--hard 해당 커밋처럼 바뀜 해당 커밋처럼 바뀜 HEAD가 해당 커밋 가리킴
  • hard 옵션을 사용하면 세가지 작업 영역이 모두 바뀐다. 작업을 하고 있던 내용이 있다면 모두 사라진다.
  • mixed 옵션을 사용하면 Repository와 Staging Area의 내용은 바뀌지만, Working Directory의 모습은 바뀌지 않는다.
    Working Directory는 가장 최근에 작업을 했던 모습 그대로 남아있다.
  • soft 옵션을 사용하면 Repository의 내용만 바뀌고 나머지 작업 영역의 내용은 모두 최근 모습 그대로 남아있다. 

작업의 특정 시점으로 내용을 변경하고 싶을 때에, 위의 조건을 참고하여 현재 상태에 적절한 옵션을 선택하면 될 것 같다.


cf. 해당 커밋 이후에 작업한 내용을 모두 잃어버리기 때문에 보통 hard 옵션은 잘 사용되지 않는다고 한다. (복구 불가)

cf. 옵션을 생략하고 git reset만 사용하면 --mixed 옵션이 자동으로 적용된다.

 

상대적인 표현으로 git reset 하기

git reset을 할 때 커밋아이디를 쓰는 방법 외에 상대적인 표현법도 있다. 커밋 아이디 대신에 HEAD^와 HEAD~n을 사용하는 것이다.

 

git reset --hard HEAD^
#현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋으로 돌아가자.

git reset --hard HEAD~n
#현재 HEAD가 가리키고 있는 커밋보다 n단계 전에 있는 커밋으로 돌아가자.

#예시
git reset --hard HEAD~2
#현재 HEAD가 가리키고 있는 커밋보다 2단계 전에 있는 커밋으로 돌아가자.

 

바로 직전의 커밋으로 돌아간다면 커밋아이디를 입력해주는 것보다 HEAD^를 사용하는 것이 편하기 때문에 참고 삼아 알아두면 도움이 될 것이다.

반응형

댓글0