💻 IT/GIT

[Git] git reset하기 (soft, mixed, hard 옵션)

Nyan cat 2022. 10. 6. 10:16


 

작업하다 보면 commit을 잘못하는 경우가 종종 발생한다. 에러 나는 코드로 커밋하거나 등등 커밋이 꼬이는 경우가 많다. 그런 경우에 잘못된 코드를 다 수정하고 다시 커밋하는 방법도 있지만 심하게 꼬인 경우에는 그냥 이전 버전으로 되돌려버리는 git reset을 사용할 수도 있다.

 

📕 git reset에 대해 잘 이해하기 위해 알면 좋은 개념 : HEAD

HEAD : 어떤 커밋 하나를 가리키는 개념으로 상황에 따라 다르지만 보통 가장 최근에 한 커밋을 가리키고 있다. 

커밋을 할 때마다 HEAD는 매번 더 새로운 커밋을 가리키게 된다.

HEAD가 가리키는 커밋에 따라 working directory가 구성된다.

결국 git reset은 HEAD가 과거의 커밋을 다시 가리키게 하는 개념이다!

 

📌 Git reset하는 법 

git log --pretty=online : 커밋 히스토리를 하나 당 한 줄 씩 보기 편하게 출력해줌

git reset --hard [커밋 아이디] : 위 명령어에서 확인한 커밋 아이디를 입력하면 해당 커밋으로 돌아감

$ git log --pretty=online

$ git reset --hard [커밋 아이디]

 

📙 git reset의 3가지 옵션

  1. --hard : 커밋 이후로 한 작업이 전부 사라짐
  2. --mixed : working dir의 모습은 바뀌지 않음
  3. --soft : working dir와 staging area의 모습은 아무런 변화 없이 최근에 작업했던 대로 남아있음
git reset [옵션] abc working directory staging area repository
--soft 안 바뀜 안 바뀜 HEAD가 abc커밋 가리킴
--mixed 안 바뀜 abc 커밋처럼 바뀜 HEAD가 abc커밋 가리킴
--hard abc 커밋처럼 바뀜 abc 커밋처럼 바뀜 HEAD가 abc커밋 가리킴

 

 💡 git reset의 3가지 scope

  1. HEAD가 과거의 특정 커밋을 가리키도록 한다 (--soft, --mixed, --hard)
  2. staging area를 과거의 특정 커밋의 내용과 똑같게 만든다. (--mixed, --hard)
  3. working directory를 과거의 특정 커밋의 내용과 똑같게 만든다. (--hard)

 

git reset을 실행하면서 별도로 옵션을 명시하지 않으면 --mixed로 동작한다.

 

📗 HEAD를 기준으로 git reset하기

git reset을 할 때 아래와 같은 형식으로 명령어를 쓰는 것이 통상적이다.

git reset [옵션][커밋 아이디]

그런데 이렇게 커밋 아이디를 쓰려면 매번 아이디를 찾아야 한다는 불편함이 있다.

그래서 아이디 자리에 다르게 표현할 수도 있다.

  • HEAD^ : 현재 커밋의 바로 이전 커밋
  • HEAD~2 : 현재 커밋의 두 단계 이전 커밋
  • HEAD~x : 현재 커밋의 x 단계 이전 커밋
반응형