Git에서 HEAD는 무엇입니까?
Git 문서에는 다음과 같은 내용이 나와 있습니다.
HEAD에서 분기를 완전히 병합해야 합니다.
깃이 무엇입니까?HEAD정확히?
HEAD를 "현재 분기"라고 생각할 수 있습니다. 때할환으로 분기를 할 때git checkoutHEAD 개정판이 새 분기의 끝을 가리키도록 변경됩니다.
다음을 수행하여 HEAD가 가리키는 내용을 확인할 수 있습니다.
cat .git/HEAD
이 경우 출력은 다음과 같습니다.
$ cat .git/HEAD
ref: refs/heads/master
HEAD가 지점 이름과 연관되지 않은 특정 리비전을 참조할 수 있습니다.이러한 상황을 분리 HEAD라고 합니다.
헤드는 단순히 커밋 개체에 대한 참조입니다.각 헤드에는 이름(지점 이름 또는 태그 이름 등)이 있습니다.기본적으로 모든 리포지토리에는 마스터라는 헤드가 있습니다.리포지토리에는 헤드가 여러 개 포함될 수 있습니다.언제든지 헤드 하나가 "현재 헤드"로 선택됩니다.이 헤드는 HEAD에 별칭이 있으며 항상 대문자로 표시됩니다."
이러한 차이점에 유의하십시오. "헤드"(낮은 대소문자)는 저장소에 있는 명명된 헤드 중 하나를 가리키며, "HEAD"(대소문자)는 현재 활성 상태인 헤드만을 가리킵니다.이 구분은 Git 설명서에서 자주 사용됩니다.
git의 내부 작동(따라서 head/HEAD에 대한 더 나은 이해)을 신속하게 다루는 또 다른 좋은 출처는 여기에서 찾을 수 있습니다.참조(ref:) 또는 헤드 또는 분기는 커밋 기록의 커밋에 부착된 포스트잇 노트와 같이 간주할 수 있습니다.일반적으로 일련의 커밋의 끝을 가리키지만, 등과 함께 이동할 수 있습니다.
이러한 답변에는 미묘하지만 중요한 오해가 있습니다.저는 그것을 해명하기 위해 제 대답을 덧붙여야겠다고 생각했습니다.
란?
HEAD?
헤드 이즈 유
HEAD는 커밋 기록에서 사용자가 있는 곳을 가리키는 상징적인 참조입니다.어디를 가든, 무엇을 하든 그림자처럼 따라다닙니다., 당이약속한다면을신,,HEAD움직일 것입니다.이 무언가를한다면, 만약당신무확면다인한를언가이,HEAD움직일 것입니다.당신이 무엇을 하든, 당신이 당신의 범죄 역사에서 새로운 곳으로 이동했다면,HEAD당신과 함께 이동했습니다.한 가지 일반적인 오해를 해결하기 위해: 당신은 자신을 분리할 수 없습니다.HEAD그것은 분리된 HEAD 상태가 아닙니다.만약 여러분이 생각하는 자신을 발견한다면: "아뇨, 저는 분리된 헤드 상태입니다!머리를 잃었어요!" 기억하세요, 여러분의 머리입니다.HEAD는 당신입니다.당신은 머리에서 분리되지 않았고, 당신과 당신의 머리는 다른 것에서 분리되었습니다.
HEAD는 무엇에 부착할 수 있습니까?
HEAD커밋을 가리킬 수 있지만 일반적으로 그렇지 않습니다.그것에 대해 다시 말할게요.일반적으로 커밋을 가리키지 않습니다.분기 참조를 가리킵니다.해당 분기에 연결되며 특정 작업을 수행할 때(예:commit또는 ), 첨부된 분기가 함께 이동합니다.HEAD당신은 그것이 무엇을 가리키고 있는지 후드 아래를 보면 알 수 있습니다.
cat .git/HEAD
일반적으로 다음과 같은 것을 얻을 수 있습니다.
ref: refs/heads/master
때로는 다음과 같은 것을 얻을 수 있습니다.
a3c485d9688e3c6bc14b06ca1529f0e78edd3f86
그럴 때가 있습니다.HEAD커밋을 직접 가리킵니다.이것은 분리 HEAD라고 불립니다, 왜냐하면HEAD분기 참조가 아닌 다른 것을 가리키고 있습니다., 이상에약한다면속을서,master 에더이애않는갖지을착상▁to에 애착이 HEAD더 이상 당신과 함께 움직이지 않을 것입니다.그 약속이 어디에 있는지는 중요하지 않습니다.마스터 분기와 동일한 커밋에 있을 수 있지만 분기가 아닌 커밋을 가리키고 있는 경우에는 해당 커밋이 분리되고 새 커밋이 분기 참조와 연결되지 않습니다.
다음과 같은 연습을 해보면 이것을 그래픽으로 볼 수 있습니다.Git 저장소에서 이 작업을 실행합니다.여러분은 약간 다른 것을 얻을 수 있지만, 그들의 핵심 부분은 거기에 있을 것입니다.직접 첫출력에서 서는 커을직체접여때할는첫얻출은서축다력약해사니시용합를에다째니있번습기웃밋크아여▁you▁when▁it(다▁abbrevi▁whateverhere니사▁directly다▁use▁is합용▁the▁commit있▁(니기습▁just,ated시▁hash▁it를▁to▁the▁checkout).a3c485d).
git checkout master
git log --pretty=format:"%h: %d" -1
# a3c485d: (HEAD -> master)
git checkout a3c485d -q # (-q is for dramatic effect)
git log --pretty=format:"%h: %d" -1
# a3c485d: (HEAD, master)
좋아요, 여기 출력에 약간의 차이가 있습니다.분기 대신 커밋을 직접 체크아웃하면 화살표 대신 쉼표가 표시됩니다.어떻게 생각하세요, 우리가 분리된 HEAD 상태에 있다고 생각하세요?HEAD는 여전히 지점 이름과 관련된 특정 개정판을 참조하고 있습니다.우리는 여전히 주 지점에 있습니다, 그렇죠?
이제 시도:
git status
# HEAD detached at a3c485d
아니요. 지금 '헤드 분리' 상태입니다.
의 동일한 표현을 볼 수 있습니다.(HEAD -> branch)대 대(HEAD, branch)와 함께git log -1.
결론적으로
HEAD, 있든 .체크아웃한 모든 항목, 어디에 있든 표시됩니다.일반적으로 이는 커밋이 아니라 분기입니다.한다면HEAD 분기가 가리키는 것과 동일한 커밋(또는 태그)일지라도 커밋(또는 태그)을 가리킵니다.HEAD해당 분기에서 분리되었습니다.분기가 연결되어 있지 않으므로 새 커밋을 수행할 때 분기가 따라오지 않습니다. HEAD그러나, 의지.
HEAD는 현재 사용자가 있는 로컬 분기를 가리키는 특수 포인터일 뿐입니다.
Pro Git 책 3.1 Git Branching - Branching in a Nutshell의 새 분기 만들기 섹션에서.
새 분기를 만들면 어떻게 됩니까?이렇게 하면 이동할 수 있는 새 포인터가 만들어집니다.testing이라는 새 분기를 생성한다고 가정합니다.git branch 명령을 사용하여 이 작업을 수행합니다.
$ git branch testing현재 사용 중인 동일한 커밋에 새 포인터를 만듭니다.
당신이 현재 어떤 지점에 있는지 어떻게 Git이 알 수 있습니까?그것은 HEAD라고 불리는 특별한 포인터를 유지합니다.이는 Subversion 또는 CVS와 같이 익숙한 다른 VCS의 HEAD 개념과는 많이 다릅니다.Git에서는 현재 사용 중인 로컬 분기에 대한 포인터입니다.이 경우, 당신은 여전히 마스터입니다.git branch 명령은 새 분기만 생성했으며 해당 분기로 전환되지 않았습니다.
github 개발자 Scott Chacon [비디오 참조]의 이 정의를 추천합니다.
헤드는 현재 분기입니다.그것은 상징적인 언급입니다.분기에 대한 참조입니다.항상 HEAD를 사용하지만 HEAD는 다른 포인터 중 하나, 즉 사용자가 있는 분기 중 하나를 가리킵니다.다음 커밋의 상위 항목입니다.작업 디렉토리에 마지막으로 체크아웃한 항목입니다.이것은 작업 디렉터리의 마지막 알려진 상태입니다.
전체 동영상은 전체 깃 시스템에 대한 공정한 소개를 제공할 것이므로, 시간이 있다면 모두 보는 것도 추천합니다.
" HEADO처럼, "분리된라 HEAD", "는한특페별경책우면에가하니정라아가지이고, O'Reilly Git명판바같시, 제와된이판페▁assuming▁o▁called제2, 2에▁69 69,HEAD평균값:평균값:
HEAD항상 현재 분기에서 가장 최근의 커밋을 참조합니다. 지을바꿀때점,때▁branches꿀,HEAD새 지점의 최근 커밋을 참조하도록 업데이트되었습니다.
그렇게
HEAD현재 분기의 "팁"입니다.
참고로 사용할 수 있습니다.HEAD커밋을 하고, 가장최참사용합니다고하조커밋을 사용합니다.HEAD~으로, 팁앞커밋서로으그고리, 의고▁as,.HEAD~~또는HEAD~2훨씬 이전의 약속과 같은 것들.
HEAD작업 복사본이 가리키는 현재 커밋, 즉 현재 체크아웃한 커밋을 나타냅니다.Git 리비전 지정에 대한 공식 리눅스 커널 문서에서:
HEAD작업 트리에서 변경한 내용의 기준이 된 커밋의 이름을 지정합니다.
1에서, 의나그 Git가다버전는오러4 1.8.4라는 에 주목하세요에서는@의 약어로도 사용할 수 있습니다.HEADGit 기고자인 Junio C Hamano가 Git Blame 블로그에서 언급한 바와 같이,
HEAD를 입력하는 대신 "@"(예: "git log @")라고 말하면 됩니다.
스택 오버플로 사용자인 VonC도 다른 질문에 대한 답변에서 왜 속기로 선택되었는지에 대한 흥미로운 정보를 발견했습니다.
또한 일부 환경에서는 자본화할 필요가 없습니다.HEAD 대/하지 않는 파일 , 윈도우즈 및 OSX를 하는 운영 에서 사용됩니다.
HEAD는 실제로 HEAD 변수가 참조하는 위치를 결정하는 내용의 파일입니다.
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed
이 리포지토리에서 HEAD 파일의 내용은 refs/heads/master라는 두 번째 파일을 참조합니다.refs/heads/master 파일에는 마스터 분기에 대한 최근 커밋의 해시가 포함되어 있습니다.
결과적으로 HEAD는 .git/refs/heads/master 파일에서 마스터 분기 커밋을 가리킵니다.

이전 답들을 다 읽고 난 후에도, 저는 여전히 더 명확한 것을 원했습니다.공식 git 웹사이트 http://git-scm.com/blog 의 이 블로그는 제가 찾고 있던 것을 알려주었습니다.
HEAD: 마지막 커밋 스냅샷, 다음 상위 스냅샷 포인터
Git의 HEAD는 현재 분기 참조에 대한 포인터이며, 이는 사용자가 마지막으로 한 커밋 또는 작업 디렉토리에 체크아웃한 마지막 커밋에 대한 포인터입니다.이는 또한 다음 번 약속의 부모가 된다는 것을 의미합니다.일반적으로 HEAD가 마지막 커밋의 스냅샷이라고 생각하는 것이 가장 간단합니다.
Git에서 HEAD는 무엇입니까? (개념적으로)
HEAD는 현재 체크아웃된 분기 또는 커밋에 대한 포인터로, 다음 질문에 답합니다.지금 저장소의 위치는 어디입니까?즉, 로컬 작업 트리를 미러링할 커밋과 현재 분기(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)에서 작업 중인지(첨부)를 확인할 수 있습니다.
분리된 HEAD
HEAD분기를 체크아웃했는지 여부에 따라 연결 또는 분리된 두 가지 상태 중 하나가 될 수 있습니다.기록에 대한 조작이 분기에 자동으로 기록되는 기본 상태가 첨부됩니다.HEAD현재 참조 중입니다.
분리된 상태에서는 기존 분기에 영향을 미치지 않고 실험 변경을 수행할 수 있습니다.연결된 상태에서 커밋하는 것과 분리된 상태에서 커밋하는 것의 차이를 보여주는 아래 인포그래픽을 참조하십시오.
일반적으로 잘못 알고 있는 것은 현재 'HEAD 분리됨' 상태의 메시지가 잘못된 톤으로 표시된다는 것입니다. 실제로는 어떻게 표시되는지 설명합니다.HEAD현재 스냅샷을 참조하고 있습니다.
HEAD를 분리 상태로 유지할 수 있는 작업:
- 커밋, 특정커확니다합인을밋을 하는 것.
$ git checkout 14ko3 - 지점을원지을명로체크합니다웃아으적시점.
$ git checkout origin/master - 하여 분기로 전환, 즉 .
$ git switch master --detached - 태를확는중입다니하인그,▁a다▁tag.
$ git checkout v1.0.1 - 대화형 기본 재배치 또는 충돌하는 변경사항을 포함하는 정기적인 기본 재배치 수행
분리된 상태에서 연결된 상태로 이동
분리된 상태에서 연결된 상태로 이동하려면 현재 위치에서 새 분기를 만들거나 기존 분기로 다시 전환할 수 있습니다.
참고: 분리된 상태에서 생성된 커밋은 새 분기에서 변경 내용을 유지하지 않고 다른 기존 분기로 전환하면 결국 삭제됩니다(가비지 수집 후).
HEAD 상태 점검
상태인지 HEAD는 현재 다른 방법으로 수행할 수 있습니다. 여기 두 가지 옵션이 있습니다.
- 용사를 합니다.
show$ git show HEAD --oneline 14ko3 (HEAD, master) C1 # If attached, the output would have been 14ko3 (HEAD -> master) C1 - 용사를 합니다.
status$ git status HEAD detached at 14ko3
HEAD가 정확히 무엇입니까?(통계학적으로)
이 어떤 것을 요.HEAD는 을 참조하고 . 항상 할 수 ..git/HEAD파일, Git가 내부적으로 관리하는 데 사용하는 실제 파일입니다.HEAD파일에는 다음 조건에 따라 분기 이름 또는 커밋 해시가 포함됩니다.HEAD분리 여부.
$ cat .git/HEAD
ref: refs/heads/master
# If detached, the output would have been
14ko36e295f1a98ec57397b3acc7bc247da61ff5
출처: 위의 발췌문은 이 주제에 대한 전체 길이의 게시물에서 발췌한 것입니다.Git에서 HEAD는 무엇입니까?
그렉 휴길의 수락된 답변에 몇 가지를 자세히 설명하고 싶습니다.깃 포켓 가이드에 따름
지점:
분기 자체는 지정된 커밋(분기의 "팁")에서 커밋 그래프에 도달할 수 있는 모든 지점으로 정의됩니다.
HEAD: 특수 유형의 Ref
특수 ref HEAD는 사용자가 어떤 지점에 있는지 결정합니다.
참조
Git는 "refs"라고 부르는 두 가지 종류의 참조 또는 명명된 포인터를 정의합니다.
- 개체 ID(일반적으로 커밋 또는 태그)를 직접 가리키는 단순 참조
- 기호 참조(또는 symref)로, 다른 참조(단순 또는 기호)를 가리킵니다.
Greg가 언급했듯이 HEAD는 "분리된 상태"에 있을 수 있습니다.따라서 HEAD는 단순 참조(분리된 HEAD의 경우) 또는 심프일 수 있습니다.
HEAD가 기존 분기에 대한 기호 참조인 경우, 사용자는 해당 분기에 있는 것"입니다.반면 HEAD가 SHA-1 ID로 직접 커밋 이름을 지정하는 단순 참조인 경우, 사용자는 분기에 "온"하지 않고 이전 커밋을 체크아웃할 때 발생하는 "분리 HEAD" 모드에 있습니다.
HEAD'는 현재 체크아웃 커밋인 것 같습니다.즉, 'HEAD'는 현재 체크아웃된 커밋을 가리킵니다.
방금 복제를 하고 체크아웃하지 않은 경우 잘못된 위치를 가리킬 수 있습니다.
정답에서 제시한 요점을 이해하는 좋은 방법은 실행하는 것입니다.git reflog HEAD헤드가 가리킨 모든 장소에 대한 기록을 얻을 수 있습니다.
헤드는 현재 체크아웃된 분기의 끝을 가리킵니다.
리포지토리에는 .git 폴더가 있습니다..git\refs\heads 위치의 파일을 엽니다.의 경우 마스터)의 ( 해시)는 가장 커밋이 즉, "sha-1 해시" (sha-1 해시) 명령어 되는 커밋입니다.git log.git 폴더에 대한 추가 정보: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html
그런 느낌이 듭니다.HEAD마지막으로 체크아웃한 커밋에 대한 태그일 뿐입니다.
이것은 특정 분기(예: "마스터")의 끝이거나 분기의 중간 커밋("분리된 머리")일 수 있습니다.
모든 정의 외에도, 제 머릿속에 남아있는 것은, GIT가 커밋을 할 때 저장소 내에 커밋 개체를 만든다는 것입니다.커밋 개체에는 상위 개체(또는 병합 커밋인 경우 여러 개의 상위 개체)가 있어야 합니다.자, 어떻게 Git이 현재 커밋의 부모를 알 수 있을까요?따라서 HEAD는 현재 커밋의 상위가 될 마지막 커밋에 대한 포인터입니다.
HEAD는 거의 말 그대로 지점장입니다.따라서 분기를 관찰할 때는 동일한 분기의 헤드인 최신 커밋을 확인합니다.그러나 이 분기의 역사에서 다른 커밋을 다시 보고 있다고 스스로 지적할 수 있으며, 그렇게 하면 헤드가 이전 커밋으로 이동합니다.HEAD는 자연스럽게 지점의 최신 커밋에 속하므로 분리된 것으로 간주됩니다.
시각적 표현.각각의 가지는 애벌레이고, 각각의 커밋은 생물의 한 부분입니다.그래서 HEAD는 가장 앞에 있는 세그먼트에 있을 것입니다.사용할 다른 세그먼트로 HEAD를 제거하면 헤드가 자연 세그먼트에서 분리됩니다.그게 말이 되기를 바랍니다.
이제 주 분기에서 HEAD를 분리한 다음 새 Feature를 체크아웃하고 다시 메인을 체크아웃하면 HEAD는 분리된 상태로 다른 커밋 위에 추가됩니다.저는 HEAD를 원하는 곳을 가리킬 수 있는 거울로 봅니다.
Git커밋에 대한 모든 것입니다.
그리고.Head현재 체크아웃한 커밋을 가리킵니다.
$ git cat-file -t HEAD
commit
분기를 체크아웃할 때마다 HEAD는 해당 분기에 대한 최신 커밋을 가리킵니다.HEAD의 내용은 아래와 같이 확인할 수 있습니다(마스터 브랜치의 경우).
$ cat .git/refs/heads/master
b089141cc8a7d89d606b2f7c15bfdc48640a8e25
저는 또한 아직 git의 내부를 파악하고 있으며, 지금까지 이것을 파악했습니다.
현재 분기가 마스터라고 가정합니다.
- HEAD는 .git/ 디렉토리에 있는 파일로 일반적으로 다음과 같습니다.
% cat .git/HEAD
ref: refs/heads/master
- refs/heads/master는 일반적으로 최신 마스터 커밋의 해시 값을 가진 파일입니다.
% cat .git/refs/heads/master
f342e66eb1158247a98d74152a1b91543ece31b4
- Git 로그를 수행하면 마스터에 대한 최신 커밋이 표시됩니다.
% git log --oneline
f342e66 (HEAD -> master,...) latest commit
fa99692 parent of latest commit
따라서 HEAD 파일은 긴 해시 값을 기억하는 대신 최신 커밋을 추적할 수 있는 편리한 방법이라고 생각합니다.
리포지토리에는 여러 개의 헤드가 있을 수 있습니다.또한 총 헤드 수는 항상 저장소에 있는 총 분기 수와 같습니다. 즉, 헤드는 각 분기의 최근 커밋에 불과합니다.
그러나 리포지토리에는 HEAD가 하나만 있습니다.HEAD는 현재 지점에서 수행된 최근 커밋을 참조하는 참조입니다.
그것은 git 사용자의 눈과 같습니다.HEAD가 참조하는 커밋이 무엇이든 간에 리포지토리는 특정 커밋 동안 리포지토리가 가졌던 조건을 반영하기 시작합니다.
HEAD의 기본 특성은 항상 현재 분기의 최신 커밋을 참조하는 것이지만 Git checkout "commit-hash"를 사용하여 현재 분기의 커밋으로 HEAD를 이동할 수 있습니다.
참고: git log --online 명령을 사용하면 커밋 해시를 쉽게 얻을 수 있습니다.
이 두 가지가 혼동을 줄 수 있습니다.
머리
최근에 제출한 분기의 명명된 참조를 가리킵니다.패키지 참조를 사용하지 않는 한 헤드는 일반적으로 $GIT_DIR/refs/heads/에 저장됩니다.
머리
현재 분기 또는 작업 트리는 일반적으로 HEAD가 가리키는 트리에서 생성됩니다.HEAD는 분리된 HEAD를 사용하는 경우를 제외하고는 헤드를 가리켜야 합니다.
http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is 을 살펴보십시오.
그림 3-5.당신이 있는 지점을 가리키는 HEAD 파일.
분기는 실제로 17a5와 같은 커밋 ID를 포함하는 포인터입니다.HEAD는 사용자가 현재 작업 중인 분기에 대한 포인터입니다.
HEAD에는 다음과 같은 참조 필터가 있습니다.
참조:
은 파은이다액확수있다습니인에 접속하여 할 수 ..git/HEAD .git/refs작업 중인 리포지토리에 있습니다.
HEAD는 실제로 현재 지점 정보를 저장하기 위한 파일일 뿐입니다.
git 명령에서 HEAD를 사용하는 경우 현재 분기를 가리킵니다.
다음을 통해 이 파일의 데이터를 볼 수 있습니다.cat .git/HEAD
저는 아직 그것을 이해하지 못했지만, Silfheed의 "노드에 부딪힌 포스트잇 노트" 정의에 대한 링크는 제가 지금까지 찾은 것 중 최고입니다.
저는 정의를 찾는 것에 대한 저의 인상을 공유하고 싶습니다. 그렇지 않으면 왜 제가 그것을 혼자만 알고 있어야 하는지요.저는 그것을 깃트리 공간의 현재 위치에 스티커를 붙인 것으로 정말 이해합니다.저는 단지 그러한 용어가 그립습니다. GIT 트리의 현재 위치는 우리가 어디에 있는지를 나타내는 고유한 속성을 가지고 있습니다.
"참조"나 "점자"와 같은 개념은 저에게 명확하지 않습니다.제가 보기에 그것들은 우리가 내부에서 무언가를 "참조"하는 새로운 수준의 추상화를 의미하는 것 같습니다.이것은 사실이 아닐 수도 있지만, 저는 지금까지 이렇게 보고 있습니다.
HEAD가 무엇인지 이해하기 위해 두 개의 서로 다른 분기를 가진 실용적인 예를 사용합니다.main그리고.feature1동일한 프로젝트에서 작업하는 두 개의 서로 다른 개발자 Dev1 및 Dev2로부터.
Dev1을 1main분기:
name~/repo (main)
$ ls -al
total 9
drwxr-xr-x 1 AlphaLy 197121 0 Dec 22 15:09 ./
drwxr-xr-x 1 AlphaLy 197121 0 Dec 21 20:35 ../
drwxr-xr-x 1 AlphaLy 197121 0 Dec 22 15:09 .git/
-rw-r--r-- 1 AlphaLy 197121 20 Dec 21 20:35 README.md
-rw-r--r-- 1 AlphaLy 197121 0 Dec 22 15:09 test.txt
다음 1
name~/repo (main)
$ cd .git/
name~/repo/.git (GIT_DIR!)
$ ls
COMMIT_EDITMSG description HEAD index logs/ ORIG_HEAD refs/
config FETCH_HEAD hooks/ info/ objects/ packed-refs
다음 2
name~/repo/.git (GIT_DIR!)
$ cat HEAD
ref: refs/heads/main
는 HEAD라는 알 수 .main내에위한의 refs/headsdirectory)heads는 내의디니다입리에 입니다.refs디렉토리)를 선택합니다.다음 1단계를 참조하여 다음 위치를 찾습니다.refs
와 이Next1 단이하여로 이동하겠습니다.cdrefs하고 다음과 합니다.main 내부에 합니다.heads되어 있는지 합니다.
name~/repo/.git (GIT_DIR!)
$ cd refs
name~/repo/.git/refs (GIT_DIR!)
$ ls
heads/ remotes/ tags/
name~/repo/.git/refs/ (GIT_DIR!)
$ cd heads/
name~/repo/.git/refs/heads (GIT_DIR!)
$ ls
main maxi
name~/repo/.git/refs/heads (GIT_DIR!)
$ cat main
8b25d89f3396177416c055ab07ebf778616eecdd
8b25d89f3396177416c055ab07ebf778616eecdd현재 커밋입니다.는 따서는 HEAD 음같은이름파일가할수있리다습니고다킨을라는 을 한다고 볼 수.main(항상 현재 분기의 이름을 따서 명명됨) 현재 커밋(위의 40자리 문자)을 포함합니다.HEAD는 현재 커밋을 의미합니다.
Dev2를 2feature1
여기서 유일한 차이점은 다음 2단계입니다.
name~/repo/.git (GIT_DIR!)
$ cat HEAD
ref: refs/heads/feature1
그리고 다음과 같습니다.
name~/repo/.git (GIT_DIR!)
$ cat feature1
03fbf973ac1014085864234010b82393208ebbd6
03fbf973ac1014085864234010b82393208ebbd6는 에대현커다니입에 입니다.feature1분점는 현재 (위의 40자리 문자 이름합니다.따라서 여기서도 HEAD는 현재 커밋(위의 40자리 문자)이 포함된 feature1(현재 분기 이름)이라는 파일을 참조합니다.
결론:
HEAD는 현재 분기가 아닌 현재 커밋을 나타냅니다.이 현재 커밋이 포함된 파일의 이름이 'HEAD는 현재 브랜치를 나타냅니다'라고 말하는 경향이 있는 현재 브랜치의 이름을 따서 명명된 것은 우연일 뿐입니다.
개념적으로 헤드는 분기의 최신 리비전입니다.명명된 분기당 둘 이상의 헤드가 있는 경우 병합하지 않고 로컬 커밋을 수행할 때 헤드를 생성하여 명명되지 않은 분기를 효과적으로 생성할 수 있습니다.
리포지토리를 "정리"하려면 명명된 분기당 헤드가 하나씩 있어야 하며 로컬에서 작업한 후에는 항상 명명된 분기로 병합해야 합니다.
이것은 머큐리얼에게도 해당됩니다.
언급URL : https://stackoverflow.com/questions/2304087/what-is-head-in-git
'programing' 카테고리의 다른 글
| XAML에서 색상을 브러시로 변환하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
|---|---|
| MVVM 패턴이 있는 WPF OpenFileDialog? (0) | 2023.05.06 |
| 범위에서 이름을 반환하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
| PostgreSQL에서 임시 함수를 만드는 방법은 무엇입니까? (0) | 2023.05.06 |
| 어떻게 하면 ASP에서 더 많은 권한을 가질 수 있습니까?NET? (0) | 2023.05.06 |



