분리된 HEAD의 문제가 발생하지 않을 수도 있지만 이를 방지하기 위해 알고 있는 것이 중요합니다. 분리된 HEAD에 커밋하지 않는 것이 좋지만 커밋하면 커밋을 저장하는 방법을 알려드리겠습니다.
알림
HEAD가 무엇인지 이해하기 위해 Git의 기본 트리와 같은 구조를 다시 살펴보겠습니다.
- 작업 디렉토리:또는 작업 트리. 로컬 디렉토리 및
git status
를 나타냅니다. 작업 디렉토리의 상태를 알려줍니다. - HEAD:현재 브랜치의 마지막 커밋 스냅샷입니다.
git checkout
으로 분기를 전환하려는 경우 그러면 HEAD가 분기의 마지막 커밋으로 변경됩니다. - 색인:또는 스테이징 영역이므로
git add
할 때 커밋할 파일이 이 색인에 추가됩니다.
연결된 HEAD 이해
이제 HEAD가 현재 있는 분기의 최신 커밋이라는 것을 이해했습니다. git status
를 수행하여 그것은 당신의 지점에 알려줄 것입니다. On branch master
git log
를 수행하여 다음과 같은 정보로 커밋 기록을 알려줍니다.
commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD) Author: Felipe <email> Date: Wed Sep 29 22:57:59 2020 -0500-0
그런 다음 git checkout development
가 있는 개발 분기를 가정해 보겠습니다. 그러면 HEAD가 마지막 커밋으로 이동합니다. 따라서 이 모든 일반적인 경우에 head는 우리가 있는 분기의 마지막 커밋에 첨부되어야 하므로 우리를 따라갑니다.
HEAD 분리
HEAD를 분리할 수 있는 몇 가지 방법이 있습니다.
git checkout --detach
사용 명령.- 커밋 해시로 체크아웃합니다. 예를 들어 위의
git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
커밋을 사용하는 경우 - 지정된 분기에 ^0을 추가합니다. 예를 들어
git checkout master^0
.
의도적으로 HEAD를 분리하고 싶은지 잘 모르겠습니다. 따라서 가장 일반적인 경우는 실수로 분기에 체크아웃하고 분기 이름 대신 커밋 해시를 사용하는 것입니다.
분리된 HEAD 후에는 어떻게 됩니까? 다음과 유사한 경고가 표시될 수 있습니다.
$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0 Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'. 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.
분리된 HEAD 환경에서 git status
를 수행하면 변경했지만 다음과 같이 표시됩니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
HEAD detached at ac63806 nothing to commit, working tree clean
그래서 그것은 당신이 시간이 멈춘 것과 같고 당신이 하는 모든 것이 길을 잃거나 아무데도 가지 않는 것과 같을 것입니다. 왜요? HEAD가 아무 것도 가리키지 않기 때문입니다.
어떤 사람들은 망가질 염려 없이 저장소의 이전 상태를 탐색하는 데 유용하다고 생각합니다.
HEAD 재부착
분리된 상태가 되더라도 어떤 지점도 영향을 받지 않음을 이해해야 합니다. . 이제 HEAD를 다시 연결하는 가장 좋은 방법은 새 분기를 만드는 것입니다.
git checkout -b <branch-name>
처럼 간단하게 수행할 수 있습니다. .
HEAD가 없다는 사실을 깨닫지 못하고 변경을 시작했다면 어떻게 될까요? 자, 여기서 임시 브랜치를 생성하고 커밋해야 하는 브랜치와 병합해야 합니다. 예:
git checkout -b temp-branch git checkout master git merge temp-branch
이렇게 하면 임시 브랜치의 변경 사항이 필요한 브랜치로 커밋됩니다. 이 경우 마스터입니다.
결론
오늘 우리는 HEAD(문자 그대로가 아님)를 분리하는 방법과 이후에 해야 할 일을 배웠습니다. Git 내부 작업에서 HEAD가 무엇인지 이해하면 분리된 HEAD와 같은 특수한 경우를 이해하는 데 도움이 됩니다.
또한 분리된 HEAD 상태가 되더라도 걱정하지 않는 방법을 배웠습니다. HEAD가 느슨하기 때문에 변경 사항과 커밋이 어디에도 반영되지 않는다는 점을 염두에 두십시오. 따라서 HEAD를 적절하게 다시 부착했는지 확인하십시오.