0. Introduction
- 해당 내용은 제대로 파는 Git & GitHub - by 얄코 를 중심으로 Pro git : Second editions을 참고하여 공부한 내용입니다.
5. Git의 HEAD
HEAD: 현재 위치를 나타내기 위해 임의로 만든 branch
history, 시간선은 그대로 두고, 파일들의 상태만 이동하는 방법에 대해 알아보자.
5.1 git checout HEAD^~
바로 git checkout을 사용하는 것이다.
git checkout HEAD^또는git checkout HEAD~에서^와~의 갯수만큼 이전으로 이동하기git checkout HEAD^^^git checkout HEAD~5
실습상황을 만들어보자. 현재 브랜치와 커밋 상황은 다음 이미지와 같다.
현재 위치는 branch
c의 HEAD에 위치한다.여기서
git checkout HEAD~을 입력하면c second commit으로 이동된다.git status로 현재 commit 위치를 확인할 수 있다.1 2$ git status HEAD detached at b99000a
aabranch의 HEAD 지점으로 이동하기 위해서git checkout HEAD~2를 입력한 후,git status로 확인하여 잘 이동된 걸 알 수 있다.1 2$ git status HEAD detached at d8a94fb
5.2 git checkout -
한 단계 되돌리기
이동을 한 단계 되돌리고 싶으면
git checkout -을 입력한다.- 되돌아간 걸 확인하기
1 2$ git status HEAD detached at b99000a
5.3 git checkout 커밋해시
이번에는
커밋 해시를 사용해서 이동해보자.b 1st commit으로 이동해보자.
1 2 3$ git checkout 57386f752a27a3dc953361091d7a384e0fb6d3ea $ git status HEAD detached at 57386f7위 이미지를 확인하면
HEAD의 위치가 현재 위치임을 알 수 있다.- 이 상태에서
git branch를 입력해보자.
1 2 3 4 5 6$ git branch * (HEAD detached at 57386f7) a aa b c- 이 상태에서
git switch (branch 명): branch의 최신 위치로 이동
우리가 만든 branch가 아닌 익명의 branch가 만들어져서 현재 위치를 나타낸다. 즉, 위에 HEAD는 또 하나의 branch라는 것이다. 그렇다면 해당 브랜치의 최신 버전으로 이동하고 싶다면
git branch (branch 명)으로 이동할 수 있다는 걸 알 수 있다.1$ git switch c그리고, 소스트리를 업데이트하면 현재 위치가 이동한 브랜치의 최신 위치임을 알 수 있다. 즉 기존 브랜치로 돌아오면 자동적으로 최신 커밋 위치로 온다.
그러면 현재 위치에서 새로운 branch를 만들고, 새 commit을 만들어보자.
1 2$ git switch -c d $ git commit -am 'd first commit'이처럼 다른 branch로 이동 후, 분기된 branch에서 다시 새로운 branch를 만들 수 있다.
5.4 HEAD 사용하여 reset 하기
git reset HEAD(원하는 단계) (옵션)
HEAD(원하는 단계) 를
해쉬 번호로 생각하자.cbranch에서 실행해보자.
| |
6. fetch와 pull의 차이
- fetch: 원격 저장소의 최신 커밋을 로컬로 가져와서 내용만 보고 싶을 때 사용한다.
- pull: 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase를 실행하는 것으로서 fetch 과정을 포함 한다.
fetch한 내역 적용 전 살펴보기원격의
mainbranch에 commit을 추가하자. 추가 후,git checkout origin/main으로 원격의 브랜치로 이동하기.원격의 변경사항을
fetch로 확인하기git checkout origin/main으로 확인해보기. 아무것도 변화된 게 없다. -> 다시git checkout main으로 로컬 branch로 돌아오기- 다음으로
git fetch입력하기 - 그리고, 아직 main branch에 적용하고 싶지 않고 살펴만 보고 싶다. 그러면
git checkout origin/main을 입력하여 확인 후, 다시git switch main으로 돌아와 서git pull을 적용한다. pull로 적용
원격의 새 브랜치 확인
git checkout origin/(branch명)git switch -t origin/(branch명)git fetch->git branch -a하면 확인가능 -> 이 branch를 확인만 하고 싶으면git checkout origin/branch명입력 ->git checkout main->git switch -t origin/remote-local
1 2 3 4 5 6 7 8 9 10 11#원격에 remote-local branch를 만든다. $ git fetch $ git branch -a * main remotes/origin/main remotes/origin/remote-local $ git checkout main $ git switch -t origin/remote-local