지나공 : 지식을 나누는 공간

그림으로 보는 Git Branch 1 : HEAD, 상대참조(Relative Ref), reset, revert 본문

Tech/Git

그림으로 보는 Git Branch 1 : HEAD, 상대참조(Relative Ref), reset, revert

해리리_ 2020. 9. 8. 01:50

Learn Git Branch의 내용을 참고하였습니다.

 

HEAD

 

HEAD는 현재 체크아웃된 커밋을 의미합니다. 즉, 현재 작업 중인 커밋으로 HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다. 따라서, 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것으로 시작합니다. 왼쪽 사진은 master 뒤에 HEAD가 있는 상태이고, 여기서 git checkout C1을 하면 오른쪽처럼 C1에 HEAD가 있게 됩니다.

 

 

Relative Ref - 상대참조

 

상대참조를 통해 브랜치에서 출발하여 다른 지점에 도달하고 거기서 작업을 할 수 있습니다.

 

^연산자

 

^는 한 번에 한 커밋 위로 움직이는 연산자(HEAD가 한 커밋 위로 이동)이고, ~<num>은 한 번에 여러 커밋 위로 올라가는 연산자입니다. 예를 들어 master의 위치에서 git checkout master^ 를 하면 master의 부모로 이동을 하고, git checkout master^^를 하면 master의 부모의 부모로 이동합니다. 아래 사진처럼 왼쪽의 상태에서 git checkout master^를 입력하면 오른쪽의 모습과 같아집니다.

 

~연산자

 

git checkout HEAD~4를 하면 HEAD에서 4만큼 돌아가고 싶다는 의미입니다.

 

git checkout master^를 통해 master의 부모로 HEAD를 이동시킴

 

브랜치 옮기기(작업 되돌리기) - 브랜치를 특정 커밋으로 재지정하기

 

git branch -f [브랜치명] [원하는위치]의 명령어로 브런치 위치를 강제할 수 있습니다. 예) git branch -f master HEAD~3 를 하면 master가 원래 가리키던 곳의 부모로 세 번 이동한다.

 

git reset

 

reset은 branch가 예전의 커밋을 가리키도록 이동시킵니다. 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮깁니다. 왼쪽의 모습에서 git reset HEAD~1 를 하면 오른쪽의 모습이 됩니다.

 

 

git revert 

 

작업을 되돌리는 방법에는 reset과 revert가 있습니다. 각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 reset을 쓸 수 있지만 다른 사람이 작업하고 있는 리모트 브랜치에는 reset을 쓸 수 없습니다. 따라서 변경한 내용을 되돌리고 이렇게 되돌린 내용을 다른 사람들과 공유하려면 git revert를 써야 합니다. 왼쪽 상태에서 git revert HEAD 를 하면 오른쪽과 같아집니다.

 

 

분명 되돌리기를 한 건데, 새로운 커밋이 생깁니다. 하지만 지금 생겨난 이 C2' 이라는 커밋은 기존의 C2 커밋에서 변경한 내용의 정확히 반대되는 내용을 가집니다. 이렇게 revert를 하면 이런 변경 사항을 push할 수 있습니다.

 

git reset은 git reset [옮길 위치]를 적지만, git revert는 git revert [되돌릴 커밋] 입니다.

728x90
Comments