HOWTO · Git

Git HEAD^ 대 Git HEAD~ 대 Git HEAD{@}

이 기사에서는 Git 캐럿과 Git 물결표의 차이점에 대해 설명합니다.

이 페이지의 내용

이 기사에서는 Git 캐럿과 Git 물결표의 차이점에 대해 설명합니다. Git 캐럿은 ^로 표시되고 물결표는 ~로 표시됩니다.

HEAD{@}도 논의할 예정입니다. 시작하자.

Git HEAD^(캐럿)

Git HEAD에 캐럿을 도입할 때 커밋의 첫 번째 부모를 가리킵니다. 따라서 git HEAD^2는 커밋의 두 번째 부모를 가리킵니다.

커밋의 부모는 무엇입니까?

커밋의 부모는 하나 이상의 브랜치를 다른 브랜치와 병합할 때 작동합니다. 예를 들어 보겠습니다.

우리 저장소에는 녹색의 Master 분기와 노란색의 Other-Branch 분기가 있습니다.

git HEAD^

other-branch의 커밋 E는 master 분기의 A 커밋과 병합됩니다. 따라서 A 커밋에는 두 개의 상위 커밋이 있다고 말할 수 있습니다.

따라서 상위 커밋은 단순히 커밋의 이전 커밋입니다.

아래 명령어를 보세요.

$ git show HEAD^ --oneline

위 명령을 실행하면 A 커밋에 있는 경우 B 커밋에서 HEAD가 이동합니다.

$ git show HEAD^2 --oneline

반면에 위의 명령은 HEAD를 이동하여 E를 커밋합니다.

HEAD^와 HEAD^1은 같은 용도로 사용됩니다.

위의 설명은 병합된 분기가 있는 경우에만 적용된다는 점에 유의할 가치가 있습니다. 한 분기로 작업하는 경우 HEAD^는 HEAD~와 동일합니다.

Git HEAD~(물결표)

HEAD에 물결표를 추가하면 분기에서 마지막 커밋의 이전 커밋을 가리킵니다. 직선으로 돌아가는 것과 같습니다.

예를 들어 보겠습니다.

git HEAD ~

따라서 HEAD가 커밋 A에 있으면 git HEAD~ 또는 git HEAD~1은 B 커밋으로 이동합니다. HEAD~2는 C를 커밋하도록 우리를 이동합니다.

other-branch의 E 커밋에서 체크아웃하면 HEAD~1은 F 등을 커밋하도록 이동합니다.

Git HEAD{@}

이 조합은 로컬 저장소의 특정 시간에 참조 위치를 가리킵니다. 일반적으로 아래와 같이 git reflog 명령을 실행할 때 팝업됩니다.

git reflog 명령

간단히 말해서 캐럿은 다른 분기의 분기를 병합할 때 유용하며 다른 분기의 커밋으로 전환해야 합니다. 물결표를 사용하면 특정 분기에서 마지막 커밋의 이전 커밋으로 이동할 수 있습니다.

단일 브랜치에서 작업할 때 HEAD^는 HEAD~와 동일합니다.