본문 바로가기
도구/Git

깃 Git 로컬 저장소 reset - repository, staging area, working directory

by 올럭Dev 2023. 10. 18.
728x90

Pasted image 20231016221114.png

로컬 저장소를 reset 해보겠습니다.
working directory, staging area, repository 를 알아보겠습니다.

목차

  • 로컬 저장소 소개
  • 로컬 저장소 reset 해보기

로컬 저장소 소개

  • reset 하기 전에 로컬 저장소 상태에 관해 알아보겠습니다.
    Pasted image 20231016221342.png
  • Working Directory: 파일을 생성할 경우 working directory에 해당합니다.
    ( reset --hard시 staging Area에 올라 갔다온 tracked file 들이 해당됩니다.)
  • Staging Area : git add로 working directory에서 staging area로 올릴 수 있습니다.
    git add로 staging area올리고 난 후 파일을 수정하면 다시 git add를 해줘야 합니다.
  • Repository : commit된 것들이 모여있는 곳입니다. push 전 저장소입니다.

로컬 저장소 reset 해보기

Reositoy( --soft ), Staging Area( --mixed ) , Working Directory( --hard ) 순으로 reset 을 진행해보겠습니다.


reset --soft로 Repository 되돌리기

--soft 옵션으로 Repository만 reset을 진행하겠습니다.

  • 우선 git log --online -2로 log를 확인해 보겠습니다.
    Pasted image 20231017231641.png
    현재 HEAD가 d23f7e4( reset soft test )를 가리키고 있습니다. 바로 아래있는 커밋으로 소스를 되돌리겠습니다.
  • commit id a1656d9reset --soft하겠습니다.
$ git reset --soft <Commint Id>
  • reset 후 다시 git log를 확인해보겠습니다.
    Pasted image 20231017232016.png
    HEAD가 a1656d9로 돌아왔네요.
    --soft 옵션을 사용하면 Stage Area와 Working Directory의 소스가 되돌려지지 않습니다.

reset --mixed로 Repository, Staging Area 되돌리기

--mixed 옵션으로 Repository와 Stage Area를 reset하겠습니다.

  • git status로 Staging Area와 working Directory의 상태를 확인해보겠습니다.
    Pasted image 20231017233552.png
    초록색이 현재 Staging Area에 올라와 있는 것이고, 빨간색이 Working Directroy에 있는 것 입니다.

  • commit id a1656d9reset --mixed하겠습니다.

git reset --mixed <Commit Id>
  • Staging Area까지 reset되었습니다.
    Pasted image 20231017234008.png
  • git reset --mixed를 진행 후 초록색으로 표시 되었던 게 사라졌습니다.
    Pasted image 20231017234035.png

reset --hard로 Repository, Staging Area, Working Directory 되돌리기

--hard 옵션으로 Repository, Stage Area와 Working Directory 로컬 저장소 전체를 reset하겠습니다.

--mixed에서 reset이 Staging Area까지 되었는데 --hard로 git status에 빨갛게 표시되던 것 까지 reset하겠습니다.

  • git status--mixed로 reset되지 않은 것들 확인해보겠습니다.
    Pasted image 20231017234936.png
  • commit id a1656d9reset --hard하겠습니다.
git reset --hard <Commit Id>
  • Working Directory까지 reset되었습니다.
    Pasted image 20231017235045.png
  • git reset --hard를 진행 후 빨간색으로 표시 되었던 것까지 사라졌습니다.
    Pasted image 20231017235222.png

근데 --hard 적용 기준이 tracked된 파일만 리셋 대상에 포함됩니다.
파일을 새로 만들고 reset --hard를 해보았습니다.

  • 파일 생성 후 바로 reset --hard 합니다.
    Pasted image 20231017235647.png
  • git status로 확인 결과, 파일 생성 후 git add 하지 않아 Untracked files들은 reset되지 않습니다.
    Pasted image 20231017235619.png

마치며

로컬 저장소 안에서 3가지 저장소를 알아보았습니다.
마지막으로 Working Directory에서 파일을 새로 생성한 경우에는 --hard 의 reset 대상이 아니라는 것을 포스팅 테스트 하면서 알게 되었네요… Staging Area 와 Working Directroy의 경계에 대해 좀 더 명확하게 알면 좋을 것 같습니다!

파일을 생성하면 untracked file이고, git add를 하면 staging Area로 올라가면서 tracked file이 됩니다.
그리고 staging Area에 있는 파일을 수정하면 Working Directory로 내려오면서 modified file이 됩니다.
modified file된 파일을 다시 git add 하면 staging Area에 modified file로 올라오게 됩니다.

reset --hard는 staging Area에서 Working Directory로 내려온 modified file까지 적용됩니다.
reset --mixed는 Staging Area로 올라온 modified file, tracked file까지 적용됩니다.
reset --soft는 staging Area에서 commit 된 파일들만 적용됩니다.

728x90