programing

Git 태그를 체크아웃하면 "HEAD 분리 상태"가 발생합니다.

newsource 2023. 6. 29. 20:11

Git 태그를 체크아웃하면 "HEAD 분리 상태"가 발생합니다.

Git 프로젝트를 위한 배포 스크립트를 개발 중이며 태그를 사용하기 시작했습니다.▁tag▁new라는 태그를 새로 v2.0:

git tag -a v2.0 -m "Launching version 2.0"

그리고 이 태그를 원격 저장소에 적용했습니다.

git push --tags

하려고 할 는 다음과 같습니다.v2.0태그 다음 메시지가 표시됩니다.

'헤드 분리' 상태입니다.둘러보고, 실험적인 변경을 하고, 커밋할 수 있으며, 다른 체크아웃을 수행하여 분기에 영향을 미치지 않고 이 상태에서 수행한 커밋을 삭제할 수 있습니다.작성한 커밋을 유지하기 위해 새 분기를 작성하려면 체크아웃 명령과 함께 -b를 다시 사용하여(지금 또는 나중에) 작성할 수 있습니다.예: git checkout -b new_branch_name HEAD가 현재 위치

그게 정상입니까?저장소가 불안정한 이유는 다음과 같습니다.

git branch

다음과 같은 출력이 표시됩니다.

* (no branch)
  master

이것이 명백하다면 미안하지만 나는 그것을 이해할 수 없었습니다.

좋아요, 처음 몇 가지 용어는 약간 지나치게 단순화되었습니다.

git,atag(다른 많은 것들과 마찬가지로) 트리쉬라고 불리는 것입니다.그것은 프로젝트의 역사에서 한 지점을 언급하는 방법입니다.트리쉬는 태그, 커밋, 날짜 지정자, 순서 지정자 또는 기타 여러 가지가 될 수 있습니다.

나우아branch태그와 비슷하지만 이동할 수 있습니다.분기를 "온" 상태에서 커밋하면 분기가 현재 위치를 나타내는 사용자가 지정한 새 커밋으로 이동됩니다.

당신의.HEAD는 "현재"로 간주되는 분기에 대한 포인터입니다.일반적으로 리포지토리를 복제할 때HEAD을 가리킬 것입니다.master그 다음엔 약속을 가리킬 겁니다그런 다음에 당신이 어떤 것을 할 때.git checkout experimental당신은 전환합니다.HEAD을가면키를 experimental다른 커밋을 가리킬 수 있는 분기입니다.

이제 설명드리겠습니다.

할 때.git checkout v2.0당신이 가리키는 것이 아닌 커밋으로 전환하고 있습니다.branch.HEAD이제 분기를 가리키는 것이 아니라 "점"입니다.지금 커밋하기로 결정한 경우에는 이 커밋을 추적하기 위해 업데이트할 분기 포인터가 없습니다.다른 커밋으로 다시 전환하면 새로 수행한 커밋이 손실됩니다.그것이 메시지가 당신에게 말하고 있는 것입니다.

이 할 수은 보통당할수있것라고 말하는 입니다.git checkout -b v2.0-fixes v2.0 트리쉬 ▁tree▁this▁to다▁at▁by▁pointer▁the▁a니▁branch▁new▁create듭만▁will트를리터 인v2.0(이 경우 태그)를 이동한 다음HEAD그 점을 지적하자면.이제 커밋을 수행하면 해당 커밋을 추적할 수 있습니다.v2.0-fixes그리고 평소처럼 일할 수 있습니다.특별히 당신이 단지 보기를 원한다면 당신이 한 일에 "잘못된" 것은 없습니다.v2.0코드입니다. 그러나 추적하려는 항목을 변경하려면 분기가 필요합니다.

당신은 git의 전체 DAG 모델을 이해하는 데 시간을 할애해야 합니다.이것은 놀라울 정도로 간단하고 모든 명령을 명확하게 합니다.

네, 정상입니다.이것은 헤드가 없는 단일 커밋을 체크아웃하기 때문입니다.특히 (조만간) 어느 지점의 우두머리도 아닙니다.

하지만 보통 그 상태에는 문제가 없습니다.만약 이것이 당신을 더 안전하게 느끼게 한다면, 당신은 태그에서 새로운 브랜치를 만들 수 있습니다 :)

언급URL : https://stackoverflow.com/questions/5582208/checking-out-git-tag-leads-to-detached-head-state