힘내 HEAD 란 무엇입니까?


답변:


775

HEAD를 "현재 분기"로 생각할 수 있습니다. 로 분기를 전환 git checkout하면 HEAD 개정판이 새 분기의 끝을 가리 키도록 변경됩니다.

다음을 수행하여 HEAD가 가리키는 내용을 확인할 수 있습니다.

cat .git/HEAD

필자의 경우 출력은 다음과 같습니다.

$ cat .git/HEAD
ref: refs/heads/master

HEAD가 분기 이름과 연관되지 않은 특정 개정을 참조 할 수 있습니다. 이 상황을 분리형 HEAD 라고합니다 .


52
git HEAD는 현재 어떤 지점에 따라 상황에 따라 다릅니다. 더욱, 당신이 개발자로? 내가 물어 본 것 같아, Git HEAD는 저장소 전체의 글로벌 일입니까, 각 개발자마다 개인입니까?
bobobobo

90
@bobobobo : 그렇습니다. HEAD는 현재 분기를 가리키는 포인터와 같습니다. 다른 지점을 체크 아웃하면 HEAD가 새 지점을 가리 키도록 변경됩니다. 현재 HEAD는 각 저장소마다 로컬이므로 각 개발자마다 다릅니다.
Greg Hewgill

16
@Meng 이것은 도움이 되었기를 바랍니다. marklodato.github.com/visual-git-guide/index-en.html
raphael

53
@動靜能量:에 머리를 가리킬 수 있습니다 어떤 커밋은 마지막 어떤 지점에 커밋 할 필요는 없습니다. HEAD가 분기의 마지막 커밋이 아닌 커밋을 가리키는 경우 "분리 된 HEAD"입니다.
Greg Hewgill

126
HEAD는 "현재 분기" 가 아닙니다 . Is는 작업 트리의 현재 상태가 초기화 된 커밋에 부여 된 이름입니다. 보다 실용적인 용어로, 이는 체크 아웃 된 커밋에 대한 상징적 인 참조로 생각할 수 있습니다.
Ben Collins

184

다른 사람 을 인용하려면 :

헤드는 단순히 커밋 객체에 대한 참조입니다. 각 헤드에는 이름 (브랜치 이름 또는 태그 이름 등)이 있습니다. 기본적으로 모든 저장소에는 master라는 헤드가 있습니다. 리포지토리에는 원하는 수의 헤드가 포함될 수 있습니다. 언제든지 하나의 헤드가 "현재 헤드"로 선택됩니다. 이 헤드는 항상 대문자로 HEAD의 별칭입니다. "

이 차이점에 유의하십시오. "헤드"(소문자)는 리포지토리의 명명 된 헤드 중 하나를 나타냅니다. "HEAD"(대문자)는 현재 활성화 된 헤드만을 가리 킵니다. 이 차이점은 Git 문서에서 자주 사용됩니다.

git의 내부 작업을 빠르게 다루고 헤드 / HEAD를 더 잘 이해하기위한 또 다른 좋은 소스는 여기 에서 찾을 수 있습니다 . 참조 (ref :) 또는 헤드 또는 브랜치는 커밋 히스토리에서 커밋에 붙어있는 포스트잇 메모처럼 간주 될 수 있습니다. 보통 그들은 커밋 시리즈의 끝을 가리 있지만 주변에 이동할 수 있습니다 git checkout또는 git reset


이것으로부터 : "각 머리에는 이름이 있습니다". 그리고 "하나의 헤드가"현재 헤드 "로 선택됩니다. 이 헤드의 이름은 HEAD입니다. " 그래서 나는 이것으로부터 "HEAD"가 "분리 된 HEAD"상태의 상황을 말하는 것이 아니라고 결론을 내립니다.
gxyd

1
@gxyd HEAD가 '헤드'를 가리 키지 않는 경우 분리 된 HEAD입니다. git checkout HEAD~2알려진 커밋의 커밋 ID가 아닌 지정한 커밋의 커밋 ID를 가리 킵니다 (예 :). 자세한 설명은 eagain.net/articles/git-for-computer-scientists 의 기사를 참조하십시오 .
Silfheed

1
@Silfheed : 일반적 으로이 대답은 수용 된 것보다 개념적으로 더 낫다고 생각합니다 (분명을 나타내는 소문자 "head"를 사용하더라도 많은 사람들이 혼동합니다). 그러나 새로운 커밋을 생성하고 여전히 현재 브랜치를 (새로운) 팁으로 남겨두기 git revert때문에 브랜치를 팁으로 이동시키지 않는 좋은 예는 아닙니다 git revert.
LarsH

1
"알려진 헤드의 커밋 ID가 아닙니다"-실제로 분리 된 HEAD 알려진 헤드 (또는 여러 헤드)의 커밋 ID 인 커밋 ID를 가리킬 있습니다. 분리되는 이유는 HEAD가 헤드가 아닌 커밋 ID를 직접 가리키고 있다는 것입니다. 이것은 미래 commit의 행동에 영향을 미칠 것입니다 reset.
LarsH

1
@LarsH : 분리 된 HEAD가 참조 대신 커밋 ID를 가리키는 좋은 점. .git / HEAD를 보면 실제로 확인할 수 있습니다. 분리 된 경우 알려진 헤드와 동일한 커밋 인 경우에도 커밋 해시가 포함됩니다. 부착 된 경우 헤드에 대한 경로가 포함됩니다 (예 : 'ref : refs / heads / bob'). 되돌리기 명령에 관해서는, 8 년 후에 나는 그 오타를 잡지 못했습니다. 힘내 재설정은 특정 커밋을 가리 키도록 특정 헤드를 조정할 수있는 기능입니다.
Silfheed

62

github 개발자 Scott Chacon [ video reference ] 에서이 정의를 추천합니다 .

헤드는 현재 지점입니다. 기호 참조입니다. 분기에 대한 참조입니다. 당신은 항상 HEAD를 가지고 있지만 HEAD는 다른 포인터 중 하나를 가리키고 있습니다. 다음 커밋의 부모입니다. 작업 디렉토리에 마지막으로 체크 아웃 된 항목이어야합니다. 이것은 작업 디렉토리의 마지막 상태입니다.

전체 비디오는 전체 git 시스템에 대한 공정한 소개를 제공하므로 시간이 있다면 모든 비디오를 시청하는 것이 좋습니다.


34
따라서 진정한 데프는 "다음 커밋의 부모"입니다
nicolas

1
또한 "이동할 다음 지점을 가리키는 것"
nicolas

@ nicolas-나는 그것이 사실 이라고 생각 하지 않습니다 . HEAD는 커밋을 가리킬 수 있으며 반드시 분기를 가리킬 필요는 없습니다. 그렇지 않은 경우 "분리 된 HEAD"모드입니다.
scubbo 2016 년

23
비디오는 훌륭하지만 불행히도 스택 오버플로에 적합하지 않습니다. 나중에 동영상이 게시 중단되면 어떻게 되나요? 그런 다음 귀하의 링크는 아무것도 가리 키지 않습니다. 더 나은 대답은 Scott이 비디오에서 말하는 내용을 포함하는 것입니다.

2
Scott은 HEAD가 지점을 가리키는 포인터라고 말합니다. 그러나 HEAD는 오래된 커밋을 가리킬 수도 있습니다. 혼란 스러워요.
Fixee 2016 년

60

HEAD는 현재 사용중인 로컬 브랜치를 가리키는 특수 포인터입니다.

로부터 프로 힘내 책, 장 3.1 힘내 분기 - 요컨대 지점 섹션에서 새 지점 만들기 :

새 지점을 만들면 어떻게됩니까? 그렇게하면 움직일 수있는 새로운 포인터가 만들어집니다. testing이라는 새로운 브랜치를 생성한다고 가정 해 봅시다. git branch 명령을 사용하면됩니다 :

$ git branch testing 

이것은 현재 커밋에서 새로운 포인터를 만듭니다.

여기에 이미지 설명을 입력하십시오

Git은 현재 어떤 브랜치를 알고 있습니까? HEAD라는 특수 포인터를 유지합니다. 이것은 Subversion 또는 CVS와 같은 다른 VCS의 HEAD 개념과는 많이 다릅니다. Git에서 이것은 현재 위치한 로컬 브랜치에 대한 포인터입니다. 이 경우에도 여전히 마스터입니다. git branch 명령은 새로운 브랜치를 만들었고 그 브랜치로 전환하지 않았습니다.

여기에 이미지 설명을 입력하십시오


4
멋지지만 분리 된 HEAD 케이스를 보여주는 사진을 사용할 수 있습니다
Don Hatch

@DonHatch, 분리 된 HEAD에 대한 좋은 설명 stackoverflow.com/a/35301963/1074179
Alexandr

3
좋은 대답입니다. 브랜치는 커밋이라는 레이블 만 붙은 것입니다. 새로운 커밋을 할 때이 레이블은 새로운 새로운 커밋으로 이동합니다. label이없는 커밋을 체크 아웃하면 HEAD 상태가 분리 된 것입니다. 이는 HEAD가 분기 레이블이없는 커밋을 가리키고 있음을 의미합니다. 34ac2위의 예에서 체크 아웃하면 HEAD가 해당 커밋을 가리키고 분리 된 HEAD라고합니다. 이 상태에서는 변경, 실험 및 커밋 변경도 가능하지만 다른 지점을 체크 아웃하면 새 지점을 만들지 않는 한 모든 변경 내용이 손실됩니다.
sleepwalkerfx

1
@sleepwalkerfx 그러나 HEAD가 더 이상 분기 레이블을 가리 키지 않고 분기의 커밋 ID를 가지기 때문에 분기 레이블이 있고 여전히 분리 된 헤드 상태 인 커밋을 체크 아웃 할 수 있습니다
Marc

1
@sleepwalkerfx이 시점에서 의미론에 대해 이야기하고 있다고 생각합니다. 분기 레이블은 특정 커밋에 대한 텍스트 참조입니다. 그러나 커밋은 아닙니다. 그래서 만약 당신이 그런 식으로 git log뭔가를 가지면 분기가 커밋 id에 대한 참조 commit ad0265... HEAD -> foo ...임을 의미합니다 . 텍스트 참조를 체크 아웃 하는 것은 분리 된 헤드가 아닙니다. 커밋 ID를 체크 아웃하면 헤드가 분리됩니다. 내가 의사 소통하는 내용의 미묘한 부분이 누락되었을 수 있습니다. 이 벽이 내가 잃어버린 곳을 찾는 데 도움이되기를 바랍니다. fooad0265fooad0265
Marc

40

O'Reilly Git 책, 2nd edtion, p.69에 명시된 바와 같이 "분리 된 HEAD"라고하는 특별한 경우가 아니라고 가정하면 다음을 HEAD의미합니다.

HEAD항상 현재 분기에서 가장 최근의 커밋을 나타냅니다. 분기를 변경 HEAD하면 새 분기의 최신 커밋을 참조하도록 업데이트됩니다.

그래서

HEAD이다 현재 브랜치의 "팁" .

우리가 사용할 수있는 참고 HEAD커밋 가장 최근에 참조하고, 사용 HEAD~(가) 끝 이전에 커밋하고, HEAD~~또는 HEAD~2(가) 그 이전 커밋, 등 등.


26

이 답변에는 미묘하지만 중요한 오해가 있습니다. 나는 그것을 정리하기 위해 대답을 추가 할 것이라고 생각했습니다.

무엇입니까 HEAD?

머리는 당신입니다

HEAD커밋 기록의 어느 위치를 가리키는 기호 참조입니다. 당신이 어디를 가든, 그림자처럼 당신을 따라갑니다. 커밋 HEAD하면 움직입니다. 당신이 뭔가를 체크 아웃 HEAD하면 이동합니다. 당신이 무엇을 하든지, 커밋 기록에서 새로운 곳으로 이사했다면 당신 HEAD과 함께 움직입니다. 하나의 일반적인 오해를 해결하려면 :에서 자신을 분리 할 수 ​​없습니다 HEAD. 분리 된 HEAD 상태가 아닙니다. 당신이 생각하는 것을 발견한다면 : "아뇨, 저는 분리 된 HEAD 상태입니다! 나는 HEAD를 잃었습니다!" 그것은 당신의 머리라는 것을 기억하십시오. 머리는 당신입니다. 당신은 HEAD에서 분리되지 않았습니다. 당신과 당신의 HEAD는 다른 것과 분리되었습니다.

HEAD에 무엇을 첨부 할 수 있습니까?

HEAD커밋을 가리킬 수 있지만 일반적으로 그렇지 않습니다. 다시 말씀 드리겠습니다. 일반적으로 HEAD커밋을 가리 키지 않습니다. 분기 참조를 가리 킵니다. 그것은되어 부착 된 해당 분기에, 당신은 어떤 일 (예를 들어, 수행 할 때 commit또는 reset) 첨부 지점과 함께 이동합니다 HEAD. 후드 아래를 보면 그것이 가리키는 것을 볼 수 있습니다.

cat .git/HEAD

일반적으로 다음과 같은 것을 얻습니다.

ref: refs/heads/master

때로는 다음과 같은 것을 얻을 수 있습니다.

a3c485d9688e3c6bc14b06ca1529f0e78edd3f86

이것이 HEAD커밋을 직접 가리킬 때 일어나는 일 입니다. HEAD분기 참조 이외의 것을 가리키고 있기 때문에 분리 된 HEAD라고합니다 . 이 상태에서 커밋을 수행하면 master더 이상에 연결 HEAD되지 않고 더 이상 나와 함께 이동하지 않습니다. 커밋이 어디에 있는지는 중요하지 않습니다. 마스터 브랜치와 동일한 커밋에있을 수 있지만 브랜치 HEAD가 아닌 커밋을 가리키면 분리되어 새 커밋이 브랜치 참조와 연결되지 않습니다.

다음 연습을 시도하면이를 그래픽으로 볼 수 있습니다. 자식 저장소에서 이것을 실행하십시오. 약간 다른 것을 얻을 수 있지만 핵심 비트가 있습니다. 커밋을 직접 체크 아웃해야 할 때 첫 번째 출력 (여기서는)에서 얻은 약식 해시를 사용하십시오 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'상태에 있습니다.

당신은 같은 표현을 볼 수있다 (HEAD -> branch)(HEAD, branch)와를 git log -1.

결론적으로

HEAD당신입니다. 당신이 어디에 있든 당신이 체크 아웃 한 것을 가리 킵니다. 일반적으로 이것은 커밋이 아니며 브랜치입니다. 경우 HEAD 수행 에 가리킨는 커밋 (또는 태그) 같은 당신 (그리고,에 가지도 포인트 있다고하더라도, (또는 태그) 커밋 HEAD) 그 지점에서 분리되었다. 지점이 연결되어 있지 않으므로 새 커밋을 수행 할 때 지점이 따라 오지 않습니다. HEAD그러나 의지 할 것입니다.


1
나는이 답변을 좋아한다. 문서는 진실을 설명하지만 소프트웨어는 진실을 정의하기 때문이다. .git/HEAD소프트웨어가 HEAD로 간주하는 것입니다.
돈 브랜슨

2
개념적인 정의만으로도 이것이 정답입니다.
ata

22

HEAD작업 복사본이 가리키는 현재 커밋, 즉 현재 체크 아웃 한 커밋을 나타냅니다. Git 개정판 지정에 대한 공식 Linux Kernel 문서에서 :

HEAD 작업 트리의 변경 사항을 기반으로 한 커밋의 이름을 지정합니다.

그러나 곧 출시 될 Git 1.8.4 버전 에서는 Git 기고자 Junio ​​C Hamano가 그의 Git Blame 블로그에서 언급 한대로 다음같이@ 속 기용으로 사용할 수 있습니다 .HEAD

"HEAD"를 입력하는 대신 "@"라고 말할 수 있습니다 (예 : "git log @").

스택 오버플로 사용자 인 VonC또 다른 질문에 대한 답변에서 속기 (short 축)로 선택된 이유 @에 대한 흥미로운 정보를 발견 했습니다 .

또한 일부 환경 HEAD에서는 대소 문자를 구분하지 않는 파일 시스템, 특히 Windows 및 OS X를 사용하는 운영 체제에서 대문자 를 사용할 필요가 없습니다.


17

브랜치 생성 및 재생 살펴보기

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 파일 에서 마스터 브랜치 커밋을 가리 킵니다 .

여기에 이미지 설명을 입력하십시오


1
주의 : gitguys.com 링크는 선점 도메인을 가리키는 것 같습니다.
MKesper

14

Greg Hewgil의 인정받는 답변에 몇 가지 사항을 자세히 설명하고 싶습니다. 힘내 포켓 가이드 에 따르면

분기:

분기 자체는 명명 된 커밋 (분기의 "팁")에서 커밋 그래프에 도달 할 수있는 모든 지점으로 정의됩니다.

HEAD : 특별한 유형의 Ref

특별 심판 HEAD는 당신이 어떤 지점에 있는지 결정합니다 ...

심판

Git은 두 종류의 참조 또는 "refs"라고하는 명명 된 포인터를 정의합니다.

  • 객체 참조 (보통 커밋 또는 태그)를 직접 가리키는 간단한 참조
  • 다른 참조 (단순 또는 기호)를 가리키는 기호 참조 (또는 symref)

Greg가 언급했듯이 HEAD는 "분리 된 상태"에있을 수 있습니다. 따라서 HEAD는 간단한 참조 (분리 된 HEAD의 경우)이거나 symref 일 수 있습니다.

HEAD가 기존 분기에 대한 상징적 참조 인 경우 해당 분기에 "있는"것입니다. 반면에 HEAD가 SHA-1 ID로 커밋의 이름을 직접 지정하는 간단한 참조 인 경우 분기가 "온"되지 않고 "분리 된 HEAD"모드에 있습니다. 조사하겠다고 결심하십시오.


@mike 감사합니다! 이것은 이전 커밋을 체크 아웃 할 때 발생하는 일을 설명하는 첫 번째 답변입니다. git 웹 사이트 의 을 보면 , "분리 된 HEAD"가 당신이 이상한 rebasing 일을했을 때만 병적 상태라는 인상을 받았습니다. 그러나 이전 커밋을 체크 아웃하는 것은 이상한 일이 아니며 그렇게 할 때 HEAD는 "현재 지점의 팁"이 아닙니다. 이것이 제가 실제로 이해하는 느낌이 처음입니다.
Nat Kuhn

7

'HEAD'는 현재 체크 아웃 커밋이라고 생각합니다. 즉, 'HEAD'는 현재 체크 아웃 된 커밋을 가리 킵니다.

방금 복제하고 체크 아웃하지 않은 경우 그것이 가리키는 것이 무엇인지, 아마도 잘못된 위치 일지 모릅니다.


예, 특별 참조 HEAD는 현재 체크 아웃 한 커밋입니다. 자세한 내용 은 설명서 를 참조하십시오 (해당 단락은 그림 3.4 바로 뒤에옵니다).
Calrion

1
저장소를 복제하면 git은 기본적으로 master분기를 체크 아웃 하므로 HEAD는 마스터를 가리 킵니다.
sleske

1
@sleske 특별한 옵션없이 저장소를 복제하면 git은 원격 헤드를 체크 아웃합니다. 일반적 master으로이지만 항상 그런 것은 아닙니다. 참조remote set-head
De Novo

에 대한 참조를 제외하고 이전의 주석은 정확 remote set-head했습니다. 로컬 기본 분기에만 영향을 미치며 서버의 기본값은 변경되지 않습니다.
De Novo

5

헤드는 현재 체크 아웃 된 분기의 끝을 가리 킵니다.

여기에 이미지 설명을 입력하십시오

리포지토리에는 .git 폴더가 있습니다. .git \ refs \ heads 위치에서 파일을여십시오. 해당 파일의 (sha-1 해시) 코드 (대부분의 경우 마스터)가 가장 최근의 커밋이됩니다 (예 : 명령 출력에서 ​​볼 수 있음) git log. .git 폴더에 대한 추가 정보 : http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html


1
현재 브랜치의 팁이 가장 최근의 커밋을 가리키는 것은 일반적인 오해입니다. 일반적으로 그렇습니다. 그러나 드문 일이 아니며 git reset HEAD^가장 최근의 커밋 (이전 팁)이 더 이상 지점의 팁으로 지시되지 않습니다.
LarsH

4

정답에서 만든 요점을 집으로 몰아 넣는 가장 좋은 방법은 달리는 git reflog HEAD것입니다. HEAD가 지적한 모든 장소의 이력을 얻습니다.


4

이전 답변을 모두 읽은 후에도 여전히 더 명확 해지기를 원했습니다. 공식 git 웹 사이트 http://git-scm.com/blog 의이 블로그는 내가 찾고있는 것을 나에게 주었다.

HEAD : 마지막 커밋 스냅 샷의 포인터, 다음 부모

망할 놈의 머리는이다 포인터 차례에 현재 가지 기준에 포인터를 당신이 만든 또는 마지막으로 그 작업 디렉토리에 체크 아웃 된 확약 마지막에. 그것은 또한 다음 커밋의 부모가 될 것임을 의미합니다. HEAD가 마지막 커밋의 스냅 샷이라고 생각하는 것이 일반적으로 가장 간단합니다.


1
HEAD : 마지막 커밋 스냅 샷, 다음 부모 는 정확하지 않습니다. HEAD커밋이 아닙니다. 그것은 가리키는 하나.
jub0bs

풍자에 대한 필요가 없습니다. 편집하기 전에 따옴표가 정확했지만 큰 굵은 글씨는 단순화되었고 약간 오도되었습니다. 이제 더 낫습니다.
jub0bs

1
당신이 다음 라인을 읽을 경우 : 망할 놈의 머리는이다 포인터 차례에 현재 가지 기준에 포인터를 당신이 만든 또는 마지막으로 그 작업 디렉토리에 체크 아웃 된 확약 마지막에. - "포인터"라는 단어의 사용에 유의하십시오.
user3751385

"마지막 커밋 스냅 샷"설명은 HEAD가 일반적으로 사용되는 방식에 대한 개념적 느낌을 주지만 실제로는 정확하지 않습니다. 커밋을 한 다음 다른 지점으로 전환하면 HEAD는 더 이상 마지막 커밋 스냅 샷을 가리 키지 않습니다. 방금 전환 한 지점의 마지막 커밋 스냅 샷을 가리 킵니다. I checkout HEAD^인 경우 이제 HEAD는 분기의 마지막 커밋 스냅 샷을 가리 키지 않습니다.
LarsH

"다음 커밋의 부모 (지금 커밋하려는 경우)"가 더 정확하지만, 커밋 외에도 HEAD의 영향을받는 다른 작업이 많이 있습니다. 정말, 결국, HEAD는 HEAD이며,이 같은 명령에 미치는 영향의 성격에 의해 정의된다 commit, merge, rebase, log"(포인터) 현재의 위치를"등 그러나 개념적으로 어쩌면을 좋은 요약입니다.
LarsH

3

HEAD마지막으로 커밋 한 커밋에 대한 태그 인 것 같습니다 .

이것은 특정 브랜치 (예 : "마스터")의 끝이거나 브랜치의 중간 커밋 ( "분리 된 헤드") 일 수 있습니다.


1

모든 정의 외에도 커밋 할 때 GIT는 저장소 내에 커밋 객체를 만듭니다. 커밋 개체에는 부모 (또는 병합 커밋 인 경우 여러 부모)가 있어야합니다. 이제 git은 현재 커밋의 부모를 어떻게 알 수 있습니까? 따라서 HEAD는 현재 커밋의 부모가 될 마지막 커밋에 대한 포인터입니다.


0

이 두 가지가 혼란 스러울 수 있습니다.

머리

지명 된 참조를 가리키는 것은 최근에 제출 한 지점입니다. package reference를 사용하지 않는 한 헤드는 일반적으로 $ GIT_DIR / refs / heads /에 저장됩니다.

머리

현재 분기 또는 작업 트리는 일반적으로 HEAD가 가리키는 트리에서 생성됩니다. 분리 된 HEAD를 사용하는 경우를 제외하고 HEAD는 헤드를 가리켜 야합니다.


0

한 번 봐 가지고 http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is을

그림 3-5. 현재 지점을 가리키는 HEAD 파일.


4
링크 오버 답변은 일반적으로 Stackoverflow에서 찌그러지기 때문에 답변의 관련 정보를 인라인하십시오.
HaskellElephant

2
이것은 완전히 정확하지 않습니다. 무엇 HEAD을 의미하는가 아닌 베어 REPO 대 베어에 대해 얘기하고 있는지 여부에 따라 달라집니다. 비 베어 리포지토리와 관련하여 현재 체크 아웃 된 커밋을 효과적으로 참조하며 연결된 커밋이 필요하지 않습니다 (즉, 분리 된 HEAD상태 일 때 ).

0

지점은 실제로 같은 ID를 저지 보유 포인터이다 17a5 . HEAD 는 현재 작업중인 브랜치에 대한 포인터입니다.

HEAD 에는 다음과 같은 참조 파일이 있습니다.

심판 :

.git/HEAD .git/refs작업중인 저장소에있는 파일에 액세스 하여 이러한 파일을 확인할 수 있습니다 .


0

Git커밋에 관한 것입니다.
그리고 Head현재 체크 아웃 한 커밋을 가리 킵니다.

$ git cat-file -t HEAD
commit

지점을 체크 아웃 할 때마다 HEAD는 해당 지점의 최신 커밋을 가리 킵니다. HEAD의 내용은 아래와 같이 확인할 수 있습니다 (마스터 브랜치) :

$ cat .git/refs/heads/master
  b089141cc8a7d89d606b2f7c15bfdc48640a8e25

-5

개념으로, 헤드는 지점의 최신 개정판입니다. 명명 된 브랜치 당 하나 이상의 헤드가있는 경우 병합하지 않고 로컬 커밋을 수행 할 때 아마도 헤드를 생성하여 명명되지 않은 브랜치를 효과적으로 만듭니다.

"깨끗한"리포지토리를 만들려면 명명 된 분기당 하나의 헤드가 있어야하며 로컬에서 작업 한 후에는 항상 명명 된 분기에 병합해야합니다.

Mercurial 도 마찬가지입니다 .


4
이것은 Mercurial에게는 해당되지만 Git 에는 해당 되지 않습니다 .
분석 재개 모니카 - notmaynard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.