내 회사에선 git을 통해 코드 관리를 하는데, 작업을 하다가 git이 꼬여서 코드를 되돌려야 하는 상황이 생겼었다
그 상황에서 reset 명령어를 사용해야 했었고, 해당 명령어는 알고는 있었지만 정확하게 알고 있지 않아, 이번 계기를 통해 reset에 대해 파헤쳐 보려고 한다.
본 내용의 글은 Github Document-reset을 통해 공부하였습니다.
git commit 명령을 실행했을 때, Git이 처리할 것들이 있는 곳.git addgit commit 명령을 실행하면 Index는 새 커밋으로 변환된다..git 디렉토리에 저장한다.git init 명령 실행
- Git 저장소가 생기고 HEAD는 아직 없는 브랜치를 가리킨다.

git add 명령을 실행하여 워킹 디렉토리의 내용을 Index로 복사한다.

git commit 명령을 실행한다.
- Index의 내용을 스냅샷으로 영구히 저장한다.
- 그 스냅샷을 가리키는 커밋 객체를 생성한다.
- 그리고 master branch가 그 커밋 객체를 가리키도록 한다.

git status 명령을 실행하면 아무런 변경 사항이 없다고 나온다.
워킹 디렉토리의 파일을 고친다.
- 이를 이 파일의 v2로 한다.

git status 명령을 바로 실행한다면 “Changes not staged for commit.” 아래에 빨간색으로 된 파일을 볼 수 있다.
git add 명령을 실행하여 워킹 디렉토리 변경사항을 Index에 올려준다.

이 시점에서 git status 명령을 실행하면 “Changes to be committed” 아래에 파일 이름이 녹색으로 변한다.
Index와 HEAD 의 다른 파일들이 여기에 표시된다.git commit 명령을 실행하여 커밋한다.

위의 커밋 이력들을 토대로 설명을 진행합니다.
예를 들어, file.txt파일 하나를 수정하고 커밋한다. ( git add → git commit )
마지막 트리의 형태는 아래와 같다.

reset 의 명령이 정확히 어떤 일을 하는지 알아보자.
트리를 조작하는 동작은 세 단계 이하로 이루어진다.
reset 명령이 하는 첫 번째 일은 HEAD 브랜치를 이동시킨다.
checkout 명령처럼 HEAD가 가리키는 브랜치를 바꾸는 것이 아니라 reset 명령어는 HEAD는 계속 현재 브랜치를 가리키고 있고, 현재 브랜치가 가리키는 커밋을 바꾼다.

여기서 git status 명령을 실행하면 Index와 reset 명령으로 이동시킨 HEAD의 다른 점이 녹색으로 출력된다.
git commit 명령을 실행하면 git commit --amend 명령의 결과와 같아진다.
git commit명령을 되돌리는 것.
Index를 현재 HEAD가 가리키는 스냅샷으로 업데이트할 수 있다.

reset 명령을 실행할 때 아무 옵션도 주지 않으면 기본적으로 --mixed 옵션으로 동작한다.
가리키는 대상을 최근의 커밋으로 되돌리고,
Staging Area를 비우기까지 한다.
git commit도 되돌리고git add명령까지 되돌리는 것.

git add와git commit명령으로 생성한 마지막 커밋으로 되돌리며, 워킹 디렉토리 내용까지도 되돌린다.
--hard 옵션은 Git 에서 데이터를 실제로 삭제하는 방법reset 옵션들은 어떻게 사용하더라도 간단히 결과를 되돌릴 수 있다.--hard 옵션은 되돌리는 것이 불가능하다.--soft 옵션이 붙으면 여기까지)--hard 옵션이 붙지 않았으면 여기까지)