내 Git 저장소가 분리 된 HEAD 상태에 들어간 이유는 무엇입니까?
나는 오늘 분리 된 머리로 끝났는데, 설명 된 것과 같은 문제가 있습니다 : git push는 로컬 변경 사항이 있어도 모든 것을 최신 상태로 말합니다.
내가 아는 한, 나는 평범하지 않은 일을하지 않았으며, 내 지역 저장소에서 커밋하고 밀어 넣습니다.
그래서 어떻게 끝났 detached HEAD
습니까?
(A)의 모든 체크 아웃은 그 중 하나의 이름이 아닌 커밋 당신의 당신에게 분리 된 HEAD를 얻을 것이다 지점. 분기의 끝을 나타내는 SHA1은 여전히 분리 된 HEAD를 제공합니다. 로컬 지점 이름 의 체크 아웃 만 해당 모드를 피합니다.
HEAD가 분리되면 이름 지정된 분기가 업데이트되지 않는다는 점을 제외하고는 커밋이 정상적으로 작동합니다. (이것을 익명 브랜치로 생각할 수 있습니다.)
예를 들어, "원격 지점"을 먼저 추적하지 않고 체크 아웃하면 HEAD가 분리 될 수 있습니다.
Git 2.23 (2019 년 8 월)을 사용하면 더 이상 혼란스러운 git checkout
명령 을 사용할 필요가 없습니다 .
git switch
또한 다음을 제외하고 지점을 체크 아웃하고 분리 헤드를 얻을 수 있습니다.
- 명시적인
--detach
옵션이 있습니다
HEAD~3
새 분기를 만들지 않고 임시 검사 또는 실험을위한 커밋을 확인하려면 :git switch --detach HEAD~3 HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- 실수로 원격 추적 지점을 분리 할 수 없습니다
보다:
C:\Users\vonc\arepo>git checkout origin/master
Note: switching to 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
대 새로운 git switch
명령을 사용하여 :
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
원격 지점을 추적하는 새 로컬 지점을 만들려면 다음을 수행하십시오.
git switch <branch>
경우
<branch>
찾았지만 원격 정확히 하나의 추적 지점은 존재하지 않습니다됩니다 (호출<remote>
상당으로 일치하는 이름, 치료와 함께)git switch -c <branch> --track <remote>/<branch>
더 이상 실수가 없습니다!
더 이상 원치 않는 분리 된 헤드!
우연히 우연히 이것을 재현했습니다.
원격 지점을 나열합니다
git branch -r origin/Feature/f1234 origin/master
로컬에서 하나를 체크 아웃하고 싶기 때문에 붙여 넣기를 잘라냅니다.
git checkout origin/Feature/f1234
프레스토 악장! 분리 된 HEAD 상태
You are in 'detached HEAD' state. [...])
해결책 # 1 :
origin/
체크 아웃 할 때 내 분기 사양 앞에 포함시키지 마십시오 .
git checkout Feature/f1234
해결책 # 2 :
-b
리모컨에서 로컬 브랜치를 생성하는 파라미터 추가
git checkout -b origin/Feature/f1234
또는
git checkout -b Feature/f1234
자동으로 원점으로 돌아갑니다
시험
git reflog
이것은 당신에게 HEAD와 브랜치 포인터가 과거에 어떻게 이동했는지에 대한 이력을 제공합니다.
예 :
88ea06b HEAD @ {0} : 체크 아웃 : DEVELOPMENT에서 리모트 / 원점 / SomeNiceFeature e47bf80 HEAD @ {1} (으)로 이동 : 원점 풀기 DEVELOPMENT : 빨리 감기
이 목록의 맨 위에는 DETACHED HEAD 상태가 발생할 수있는 이유 중 하나가 있습니다. 원격 추적 분기를 확인합니다.
파일을 다시 체크 아웃하고 구문을 제대로 얻지 않아 변경 사항을 취소하려고하면 쉽게 발생할 수 있습니다.
당신은 출력 결과를 볼 수 있습니다 git log
-마지막 커밋 이후 로그의 꼬리를 여기에 붙여 넣을 수 있으며 우리는 당신이 한 일을 모두 볼 수 있습니다. 또는 그것을 붙여 넣을 수 #git
있고 freenode IRC에 멋지게 요청할 수 있습니다.
지점과 이름이 같은 태그가있는 경우 발생할 수 있습니다.
예 : "release / 0.1"이 태그 이름 인 경우
git checkout release/0.1
"release / 0.1"에서 분리 된 HEAD를 생성합니다. release / 0.1이 브랜치 이름이 될 것으로 예상되면 혼란스러워합니다.
간단한 실수 git checkout head
는 오타를하는 것입니다 HEAD
.
이 시도:
git init
touch Readme.md
git add Readme.md
git commit
git checkout head
어느 것이
Note: checking out 'head'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 9354043... Readme
자식 분리 헤드 상태를 얻는 다른 방법은 원격 브랜치를 커밋하는 것입니다. 다음과 같은 것 :
git fetch
git checkout origin/foo
vi bar
git commit -a -m 'changed bar'
이 작업을 수행하면 origin / foo를 더 이상 체크 아웃하려고하면 분리 된 헤드 상태로 돌아갑니다.
해결책은 origin / foo를 추적하는 자체 로컬 foo 분기를 만든 다음 선택적으로 푸시하는 것입니다.
이것은 아마도 원래 문제와 관련이 없지만이 페이지는 "git detached head"에 대한 Google 조회수에서 높으며이 시나리오는 문서화가 심각하지 않습니다.
커밋 git checkout <commit-hash>
또는 원격 브랜치에 체크 아웃하면 HEAD가 분리되어 새 커밋을 생성하려고 시도합니다.
지점이나 태그가 도달 할 수없는 커밋은 30 일 후에 가비지 수집되어 저장소에서 제거됩니다.
이를 해결하는 또 다른 방법은 새로 작성된 커밋 및 체크 아웃을위한 새 브랜치를 작성하는 것입니다. git checkout -b <branch-name> <commit-hash>
이 문서에서는 HEAD 상태 를 분리 하는 방법을 보여줍니다 .
참고 URL : https://stackoverflow.com/questions/3965676/why-did-my-git-repo-enter-a-detached-head-state
'Programing' 카테고리의 다른 글
자식 : 당신의 지점은 X 커밋보다 앞서 있습니다. (0) | 2020.03.01 |
---|---|
C ++ 함수에서 정적 변수의 수명은 얼마입니까? (0) | 2020.02.29 |
git 'pull request'가 'push request'라고 불리는 이유는 무엇입니까? (0) | 2020.02.29 |
Android Studio가 느립니다 (속도를 높이는 방법)? (0) | 2020.02.29 |
CMake가 'configure --prefix = DIR && make all install'과 동등한 것은 무엇입니까? (0) | 2020.02.29 |