# git commit, branch 옮기기

오늘은 git에 여러 커밋이 있을 때, 이전 커밋으로 올라가거나, 다른 브랜치로 옮기는 명령어에 대해서 알아보겠습니다~

그전에 미리 알아두면 좋을 Head에 대해 알아봅니다!

head는 현재 브랜치 작업트리의 가장 최근 커밋을 가리킵니다.

head를 분리한다 -> 브랜치에 붙어있던 head를 커밋에 붙인다 (즉 현재 내가 위치한 위치를 브랜치가 아닌 커밋에 붙인다)

git checkout 커밋이름(fed2dawdanv) -> head를 분리하여 원하는 커밋에 붙인다

참고로 해쉬커밋이 매우 난잡하여 복사하기 힘든데 앞의 4글자만 붙여도 정상적으로 작동합니다. 아래의 두 명령어는 동일하다는 의미입니다.

git checkout fed2dawdanvwadfoiaheviejaieoc

git checkout fed2

# 캐럿 연산자(^) 이용하여 원하는 브랜치의 바로 이전 커밋으로 이동

캐럿 연산자(^)를 이용하면 바로 이전 커밋으로 이동할 수 있습니다.

아까 위에서 HEAD는 현재 브랜치의 가장 최근 커밋이라고 말씀드렸습니다. 이 HEAD를 이용하여 윗커밋 윗윗커밋으로 이동해보겠습니다!

branch1이라는 브랜치가 있고, 해당 브랜치에는 3개의 커밋이 있다고 가정합니다.

// 브랜치를 branch1으로 이동합니다.
git checkout branch1

// branch1의 이전 커밋으로 이동합니다.
git checkout HEAD^

// branch1의 이전 이전 커밋으로 이동합니다.
git checkout HEAD^

# 틸트 연산자(~)를 이용하여 원하는 수만큼 이전 커밋으로 이동

캐럿 연산자(^)를 이용하면 여러 이전 커밋으로 이동할 수 있습니다.

branch1이라는 브랜치가 있고, 해당 브랜치에는 3개의 커밋이 있다고 가정합니다.

// 브랜치를 branch1으로 이동합니다.
git checkout branch1

// branch1의 3번 이전 커밋으로 이동합니다.
git checkout HEAD~3

# 브랜치 강제로 옮기기

상대 참조(^, ~)를 통해 이동하시다가 다시 브랜치를 원래대로 옮길 때, 특정 에러로 인해 움직이지 못하는 경우가 있습니다.

제가 상대 참조를 사용하는 가장 일반적인 방법은 브랜치를 옮길 때 입니다. -f 옵션을 이용해서 브랜치를 특정 커밋에 직접적으로 재지정 할 수 있습니다.

git branch -f master HEAD~3

(강제로) master 브랜치를 HEAD에서 세번 뒤로 옮겼습니다. (three parents behind HEAD).

Last Updated: 3/24/2021, 8:55:12 PM