현재 저장소가 어떤 버전으로 되어 있는지 알고 싶다면?
Head가 가리키는 master가 가리키고 있는 이 버전을 통해서 알 수 있다라는 것입니다.
우리가 버전을 또 하나 생성을 해요. 2라고 하는 버전이 생성되고 이 버전은 부모가 1이라는것을 알아요.
그리고 master 브랜치가 이제 누구를 가리키느냐?
숫자 2라는 버전을 가리키게 된다.
이걸 통해서 무엇을 할 수 있다?
현재 이 저장소의 버전이 무엇이냐 라는것은 이 Head를 따라서 master를 따라서 내려가서 현재 이 저장소는 2번 버전에 있다라는 것을 알 수 있다.
이 상태에서 git branch중에 master branch는 이미 있고 google branch를 새로 만들었다.
그럼 어떤일이 생기냐 하면?
일단 google 브랜치가 만들어져요. 그리고 이 branch가 어떤 버전으로 시작할 것인지를 결정을 해야 되는데 그때 head를 보고 master를 보고 이 master가 가리키는 버전을 보고나서 google 이라는 새로운 브랜치는 2번 버전으로 시작하는거구나 라는것을 git이 알고 시작하는거에요.
Checkout google을 통해서 현재 저장소의 branch를 google로 바꾼다 라는 것은 Head가 가리키고 있는것을 master에서 google로 바꾸는 거에요.
이걸 통해서 무엇을 알 수 있다?
Head를 보고 head가 google 이니까 이 저장소는 google 브랜치에 checkout되어 있구나. 그리고 이 저장소의 최신 상태는 이것이구나 라는것을 알수 있다.
이 상태에서 3번이라는 새로운 버전을 만들고 3번의 부모는 2번이고 그리고 우리가 google의 checkout된 상태로 버전을 만들었기 때문에 google 브랜치는 3번을 가리키게 되는 겁니다.
즉, 이로써 master에서 시작한 google은 master와는 다른 버전을 가리키게 되는 거에요.
Checkout master를 한다는 것은 내부적으로 어떤일을 하는 것이냐?
Head가 가리키고 있는것을 master로 바꾸는 것이고 master가 가리키고 있는 2번 버전으로 저장소를 휙 바꾸는 거에요.
Checkout 이라는 것은 Head의 값을 바꾸는 것이라고 알 수 있다. 그래서 여러분이 Head를 master나 google 같은 branch로 지정할수도 있지만 이렇게도 할수도 있어요.
여러분이 checkout 1번 하고 엔터를 치면 이제 Head는 branch를 가리키지 않고 1번 이라는 이름의 버전을 직접 가리킵니다. 그리고 이 저장소는 바로 1번 저장소의 상태가 될거에요.
Head가 branch를 가리키지 않고 commit(버전)을 가리키는 상태를 "branch로부터 detached(떨어져있다)."라고 얘기하는것이다.
Checkout 이라는것은 Head를 제어하는 것이다.
Checkout vs Reset
Checkout
뭔가를 change 하는 느낌. 지우는 느낌은 없음.
Head를 제어한다.
Reset
뭔가를 지우는 느낌이 있다.
Head가 branch를 가리키고 있는 동안은 branch를 제어한다.
Checkout master
현재 head가 google을 가리키고 있죠. 이 상황에 checkout master를 하면 더 이상 head는 google이 아니라 master를 가리키게 된다.
우리는 현재 master branch에 속해있고 우리의 working copy는 master branch가 가리키고 있는 2번 버전(commit)으로 바뀐다.
Reset 1(master가 가리키는 버전)
현재 google branch에 checkout된 상태죠.
Reset은 branch를 바꾸는 거에요.
Reset master라는 것은 google branch가 master가 가리키고 있는 버전(commit)으로 바꾼다는 뜻이에요.
Google이 2번 버전(commit)을 가리키면서 우리의 working copy가 2번 버전(commit)의 상태가 된다.
Google의 입장에서는 이전에 3번을 가리키고 있었는데 이제 2번을 가리키게 되면서 더 이상 3번은 google 브랜치와는 상관없는 녀석이 된거에요. 그러면서 3번은 사라지게 됩니다.
하지만 reset 뒤에는 branch가 아니라 1번 버전의 이름이 오는 것이다.
Reset 1이라고 한다면 google branch는 1번을 가리키게 되면서 2번, 3번은 더 이상 google이 가리키는게 아니기 때문에 지워진 느낌 인것입니다.
'Git' 카테고리의 다른 글
Git Collaboration(2) (0) | 2024.02.21 |
---|---|
Git Collaboration(1) (0) | 2024.02.20 |
Git branch & conflict(6) (0) | 2024.02.19 |
Git branch & conflict(5) (0) | 2024.02.19 |
Git branch & conflict(4) (0) | 2024.02.18 |