본문 바로가기
Git

Reset & Revert

by GalaxyStar 2024. 2. 21.

Head

head
head

a, b, c라고 하는 각각의 commit id 가지고 있는 3개의 버전이 있고 현재 마지막 버전은 c 입니다.

 

Head 현재 우리가 작업하고 있는 working directory 어떤 버전을 기반으로해서 수정 되었는지를 보여줍니다.

 

현재 head master 가리키고 있고 master c 가리키고 있기 때문에 우리가 작업하고 있는 코드는 바로 master 가리키고 있는 c 버전이 만들어진 시점에 working directory 스냅샷을 기반으로 수정되고 있는 것이다.

reset-revert
reset-revert

Head 옮긴다는것은 어떤 의미인가요?

 

Head b 가리키게했다. 그럼 git b 버전이 만들어진 시점의 스냅샷을 현재 working copy 쏟아 부어서 b 버전이 만들어진 시점으로 우리의 working copy 바꿔 버려요. 그럼 거기서 작업을해서 commit하고 작업을 있겠죠.

 

Head 옮긴다는것은 우리의 working directory 버전의 상태로 바꾸겠다.

head 어떤 버전을 가리키고 있다는것은 우리의 working directory 버전으로 수정되고 있다는 의미에요.

 

Git checkout b

git-checkout
git-checkout

Checkout head 바꾸는 것이다.

우리의 working copy b 버전을 기반으로 하게 된다.

 

Git reset b

git-reset
git-reset

Reset head branch 가리키고 있을때 branch 가리키고있는 버전을 바꿉니다.

우리의 working copy b 버전을 기반으로 하게 된다.

 

-공통점

Reset 하건 checkout 하건 우리의 working copy 똑같은 상태가 된다.

 

-차이점

Reset Checkout
master 가리키고 있는 버전을 바꿨어요. head 바꿨을뿐 master 안바꿨다.
Git log 통해 확인한 결과, reset을하면 아무도 c 바라보고있지 않기 때문에 c 눈에 보이지 않습니다. Checkout 했을때 c 여전히 master 브랜치가 가리키고 있기 때문에 git log --all 옵션을 줘서 확인을 하게되면 c 볼수가 있다.
Delete 효과.
(C 지워지지 않았고 눈에 보이지 않을 뿐이다.)
Delete 느낌이 없음.

Git reset master

git-reset
git-reset

현재 head 가리키고있는 master 가리키고있는 버전으로 바꿔라. 변동사항 없음.

 

Git checkout master

git-checkout
git-checkout

Git reset (c commit id)

git-reset
git-reset

C commit id 알고 있으면 reset 통해 복원을 있다.

Master c 버전을 가리키게될 것이고 working copy c 상태로 변경 된다.

Git log 하면, c 보이게 .

 

Git checkout c

git-checkout
git-checkout

Head master -> c 가리키는 것으로 변경될 것이고 working copy c 상태로 되고 head 어떠한 branch 가리키지 않는 상태가 된다. => Detached head

 

Git reset --hard 옵션에 대해 살펴 보자.

Git init git4-reset-revert-1

저장소 초기화

git-init
git-init

Work.txt 생성

Git add work.txt

Work.txt staging area add

 

Git commit -am "work 1"

"work 1" 버전 생성

위와 같은 방식으로 work.txt 2, 3 추가 work 2, work 3 버전생성

Work.txt

Git commit -am "work 2"

git-commit
git-commit

work.txt

 

Git commit -am "work 3"

git-commit
git-commit

Git --no-pager log --oneline

 

Git reset --hard 81b96b8

"work 2" 버전으로 reset

git-reset
git-reset

Head 가리키는 master "work 2" 버전을 가리키게 되면서 "work 3" 삭제된 효과가 난다.

 

Git reset --hard 6cbb59c

"work 3" 버전으로 복원

git-reset
git-reset

Git reset --soft 81b96b8

"work 2" 버전으로 reset

git-reset-soft
git-reset-soft

work.txt 파일이 staging area 올라가있는 상태이며, head "work 2" 버전을 가리키고 있는데 내용은 "work 3" 버전임.

git-status
git-status

work.txt 1 작성, stage area add, commit -m "A" repository 저장.

work.txt 2 수정, stage area add, commit -m "B" repository에 저장. Master B 가리키고 head 기본 branch master 가리킴.

Work.txt 3으로 변경, stage area add, commit -m "C" repository에 저장. Master C 가리킨다.

 

Git reset --            (B commit id)

옵션이 soft, mixed, hard 일때는 어떻게 되는가?

옵션이 soft, mixed, hard master 브랜치는 무조건 B 가리키게 됩니다.

Repository 상에서 head 가리키고 있는 work.txt 파일의 내용은 soft, mixed, hard 전부 2 된다.

 

--soft 하게되면,

1. working dir 파일을 전혀 건드리지 않습니다현재 working dir 파일 내용은 3이니까 그대로 3 되구요.

2. Staging area 건드리지 않아요. 그대로 3 됩니다.

3. Repository 2 변경

 

-- mixed

Working dir 손대지 않아 그대로 3.

Staging area, repository 2 됩니다.

 

-- hard

Working dir, stage area, repository 모두 똑같은 2 됩니다.

심플 하지만 우리가 작업하고 있었던 내용이 날라 간다라고하는 굉장히 위험한 요소를 가지고 있음.

'Git' 카테고리의 다른 글

Git Collaboration(3)  (0) 2024.02.21
Git Collaboration(2)  (0) 2024.02.21
Git Collaboration(1)  (0) 2024.02.20
Git branch & conflict(7)  (0) 2024.02.19
Git branch & conflict(6)  (0) 2024.02.19