깃 리셋 hard 옵션 (git reset hard command option)

깃 리셋 hard 옵션 (git reset hard command option)

깃을 이용하여 개발할 때, 이전 커밋으로 돌아가야 하는 경우가 있습니다. 그런 경우 git reset으로 돌아 갈 수 있는데요. 이 리셋 명령어에 다양한 옵션을 줄 수 있습니다.

그 중에서도 제가 주관적으로 자주쓰는 명령어 옵션인 hard 옵션에 대해서 설명하도록 하겠습니다.

reset

기본적으로 reset 명령어는 이전 커밋으로 돌아가기 위한 명령어입니다.

순차적으로 리셋에 관한 예제를 한번 만들어 보겠습니다.

git reset 예제 (example)

  1. 텍스트 파일 생성하기.
> echo "테스트 문장." > test.txt
  1. Stage 및 commit 하기
> git add .
> git commit -m "reset test commit"

이제 다음 명령어로 깃 로그를 찍어 보겠습니다.

> git log

commit 83d2c582abd55671b3a4d2d63ffb60c09ab8c726 (HEAD -> master)
Author: test <test@github.com>
Date:   Sun Feb 23 10:42:55 2020 +0900

    reset test commit

첫 번째 커밋이 생겼습니다.

  1. 텍스트 파일 내용 변경하기.
> echo "second line" >> test.txt

텍스트 파일안에 두 번째 줄을 추가합니다.

  1. 다시 또 Stage 및 Commit을 합니다.
> git add .
> git commit -m "reset second test commit"
  1. 깃 로그 확인하기.
git log

// 두번째 커밋
commit aed5befb787a9ccf65547336d4eb73099623c3ea (HEAD -> master)
Author: test <test@github.com>
Date:   Sun Feb 23 10:47:34 2020 +0900

    reset second test commit

// 첫번째 커밋
commit 83d2c582abd55671b3a4d2d63ffb60c09ab8c726
Author: test <test@github.com>
Date:   Sun Feb 23 10:42:55 2020 +0900

    reset test commit
  1. 이전 커밋으로 리셋하기
> git reset HEAD~

다시 로그를 보겠습니다.

git log

commit 83d2c582abd55671b3a4d2d63ffb60c09ab8c726
Author: test <test@github.com>
Date:   Sun Feb 23 10:42:55 2020 +0900

이전 커밋으로 돌아오는 것에 성공했습니다. 그리고 git status 명령어를 통해 상태를 보도록 하겠습니다.

git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

UnStaged 상태로 돌아왔습니다 ! 즉, 두 번째 커밋을 하기 전 변경 사항이 남아있다는 이야기 입니다.

테스트 문장. <-- 첫 번째 커밋
second line <-- 두 번째 커밋 하기 전의 변경사항

hard 옵션

방금 전, reset 명령어에서 두 번째 커밋 하기 전의 변경사항도 없게 reset을 하고 싶은 경우가 있습니다. 그런 경우, 이 hard 옵션을 주시면 됩니다.

// 두 번째 커밋까지 완료된 상태에서
git reset --hard HEAD~

이런 식으로 리셋을 하게 되면, 변경 사항도 없게 reset을 할 수 있습니다.

감사합니다.