- HEAD는 현재 체크아웃된 커밋을 가리킵니다. 다시 말하자면 현재 작업중인 커밋 입니다!.
- HEAD는 항상 작업트리의 가장 최근 커밋을 가르킵니다.작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는것으로 시작합니다.
git checkout C2 ; c2 커밋으로 HEAD를 옮긴다.
git checkout main; main 브랜치로 HEAD를 옮긴다.
- Git에서 여기저기 이동할때 Commit의 해시를 이용해서 옮깁니다.
- git log를 사용해서 해시를 확인하고 옮겨야 하는데 힘듭니다!- 상대참조는 우리가 기억할만한 지점 ( 브랜치 혹은 HEAD) 에서 출발해서 다른 지점에 도달해서 작업을 할 수 있습니다.
- 한번에 한 커밋 위로 움직이는 ^
- 한번에 여러 커밋 위로 올라가는 ~num
// ^ 상대참조
git checkout main^ ; main의 부모로 HEAD를 옮긴다.
git checkout main^^ ; main의 부모의 부모로 HEAD를 옮긴다.
//~ 상대참조
git checkout HEAD~4 ; HEAD 4칸 위로 올라간다.
->git checkout main^
git branch -f main HEAD~3 ; main branch를 HEAD의 3번째 부모에 갖다 놓겠다.
- Git에는 작업한것을 되돌리는 여러가지 방법이 있습니다.
- git reset
a. git reset은 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경내용을 되돌립니다. "히스토리를 고쳐쓴다"라고 말할 수 있습니다.
- 브랜치를 아예 이전 커밋으로 돌린다고 생각합시다!
- git revert
a. 각자 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋을 잘 쓸 수 있지만, 다른사람이 작업하는 리모트 브랜치에는 쓸 수 없습니다.
b. 변경분을 되돌리고 이 되돌린 내용을 다른사람과 공유하기 위해선 git revert를 써야합니다.
- 되돌리려고 했던 C2의 아래에 새로운 커밋이 생겼습니다.
- 이 커밋에 C2 커밋 내용의 반대되는 내용이 생겨난겁니다.- revert를 하면 다른사람들에게도 변경내역을 push할 수 있습니다.
//reset
git reset main ; HEAD가 있는 commit은 버리고 main branch로 reset하겠다.
git reset c1 ; c1 commit으로 reset 하겠다.
//revert
git revert pushed ; pushed의 변경내역을 지우는 commit을 HEAD 밑에 만들겠다.