작업하다 보면 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가지 옵션
- --hard : 커밋 이후로 한 작업이 전부 사라짐
- --mixed : working dir의 모습은 바뀌지 않음
- --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
- HEAD가 과거의 특정 커밋을 가리키도록 한다 (--soft, --mixed, --hard)
- staging area를 과거의 특정 커밋의 내용과 똑같게 만든다. (--mixed, --hard)
- working directory를 과거의 특정 커밋의 내용과 똑같게 만든다. (--hard)
git reset을 실행하면서 별도로 옵션을 명시하지 않으면 --mixed로 동작한다.
📗 HEAD를 기준으로 git reset하기
git reset을 할 때 아래와 같은 형식으로 명령어를 쓰는 것이 통상적이다.
git reset [옵션][커밋 아이디]
그런데 이렇게 커밋 아이디를 쓰려면 매번 아이디를 찾아야 한다는 불편함이 있다.
그래서 아이디 자리에 다르게 표현할 수도 있다.
- HEAD^ : 현재 커밋의 바로 이전 커밋
- HEAD~2 : 현재 커밋의 두 단계 이전 커밋
- HEAD~x : 현재 커밋의 x 단계 이전 커밋
반응형
'💻 IT > GIT' 카테고리의 다른 글
[Git] git으로 코드 작성자 찾는 법 (0) | 2022.11.14 |
---|---|
[Git] git branch 다루기 (branch 만들기, 삭제하기, 이동하기) (0) | 2022.11.03 |
[Git] Git이란? (0) | 2022.09.13 |