Warning

해당 문서를 정확하기 위해서는 Git의 상태 변화와 스테이지 영역에 대한 이해가 필요하니, 관련된 참고자료를 먼저 확인해주시면 좋겠습니다.

Pasted image 20240925210409.png

1. 기본 개념

git reset은 특정 커밋으로 돌아가거나, 스테이징된변경 사항을 초기화하는데 사용하는 명령어 입니다. 즉 현재 상태에서 선택한 이전 커밋 상태로 변경사항을 되돌리는 것입니다.

Git을 사용하다 보면 다음과 같은 이유 등으로 HEAD의 위치를 옮겨서 과거 커밋 상태로 되돌리거나 작업 내용을 수정하고 싶을 때가 있습니다.

이를 위해 git reset 명령어를 사용합니다.

git reset을 제대로 사용하려면, 함께 사용할 수 있는 다양한 옵션들을 정확히 이해해야 합니다.


2.예제 상황

상황

현재 우리는 feature 브랜치에서 작업 중이며, 두 개의 커밋을 만든 상태입니다. 그 상태를 먼저 확인해보겠습니다.

$> git log --oneline

a1b2c3d (HEAD -> feature) Second commit
f6g7h8i First commit
<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Welcome to my page!</h1>
    <p>This is the second version of my page.</p> <!-- 추가된 내용 -->
  </body>
</html>

3. git reset의 3가지 모드

--soft 옵션:
$> git reset --soft HEAD~1
Changes to be committed:
  modified:   index.html
<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Welcome to my page!</h1>
    <p>This is the second version of my page.</p> <!-- 추가된 내용 -->
  </body>
</html>

--mixed 옵션:

$> git reset --mixed HEAD~1
$> git status

Changes not staged for commit:
  modified:   index.html
<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Welcome to my page!</h1>
    <p>This is the second version of my page.</p> <!-- 추가된 내용 -->
  </body>
</html>

--hard 옵션:

$> git reset --hard HEAD~1
$> git status

nothing to commit, working tree clean
<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Welcome to my page!</h1>
  </body>
</html>