HEAD와 마스터의 차이점


188

Git HEADmasterGit 의 차이점은 무엇입니까 ?

GitHub에서 프로젝트 복제본을 만들고 변경 사항을 원격으로 푸시하고 싶습니다. 그러나 어느 쪽을 밀어야합니까?

스크린 샷

답변:


162

master분기의 끝에 대한 참조입니다. 관례에 따라 (그리고 기본적으로) 이것은 일반적으로 주요 통합 브랜치이지만 반드시 그럴 필요는 없습니다.

HEAD실제로 다른 참조를 가리키는 특수한 유형의 참조입니다. 가리 키 master 거나 가리 키지 않을 수 있습니다 (현재 체크 아웃 된 분기를 가리 킵니다). master브랜치에 커밋하려는 것을 알고 있다면 이것을 푸시하십시오.

다음은 시각적 예입니다.

대체 텍스트

자신의 저장소에서 다음 HEAD을 실행 하여 가 가리키는 위치를 확인할 수 있습니다 .

$ git symbolic-ref HEAD
refs/heads/master

그러나 remotes/origin/HEAD원격 시스템에 있기 때문에를 가리키는 위치를 찾는 것이 더 까다 롭습니다.

git 참조에 대한 훌륭한 튜토리얼이 있습니다.

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1


1
+1보다 정확한 답변. 이러한 개념에 대한 그림 은 stackoverflow.com/questions/3301956/…stackoverflow.com/questions/3301956/… 도 참조하십시오 .
VonC

37

간단한 대답은 HEAD현재있는 지점의 가장 최근 커밋에 대한 포인터 / 레이블입니다. mastergit 저장소를 초기화 할 때 생성 된 기본 분기입니다 (예 :) git init.

master분기 를 삭제할 수 있습니다 (예 :) git branch -D master. HEAD포인터를 삭제할 수 없습니다 .


6
" HEAD는 현재있는 지점의 가장 최근 커밋에 대한 포인터 / 라벨입니다." 나는 이것이 오도라고 생각합니다. 이전 커밋을 체크 아웃하면 HEAD는 이제 최신 커밋이 아닌 이전 커밋에 대한 포인터입니다. 권리?
LarsH

2
당신이 올바른지. HEAD는 최신 체크 아웃입니다. 그러나 내 방어에서 Git의 경우 checkout명령은 다른 일반적인 SCM 시스템에서 분기를 전환하는 것과 같습니다.
benhorgen

1
나는 동정한다 ... 나는 쉽게 같은 실수를 할 수 있었다. 내가 목격 한 유일한 이유는 HEAD가 실제로 무엇을 의미하는지 연구하는 단계에 있기 때문입니다. 대답을 올바르게 편집 할 수 있습니까? HEAD는 나와 같은 git non-experts에 대한 정확한 설명을 찾기 어려운 개념이라고 생각합니다. HEAD에 대한 잘못된 정보 를 제공하는 조언을 웹 에 올리면 상당히 어려워집니다.
LarsH

2
귀하의 의견은 Git HEAD포인터가 실제로 무엇인지 더 잘 이해하려는 사람들에게 환상적인 설명이라고 생각합니다 . 귀하의 의견에 감사 드리며 다른 사람들도 그렇게 생각합니다. 내 원본 게시물의 내용과 후속 의견이 서로 보완됩니다. 감사.
benhorgen

4
기술이지만, 이전 커밋을 체크 아웃하면 더 이상 지점에 있지 않습니다. 브랜치 대신 커밋을 체크 아웃하면 "분리 된 HEAD"가 있으며 더 이상 브랜치에 있지 않습니다. '지점에있다'는 것은 HEAD가 지사를 참조하고 있음을 의미하며 정의에 따라 해당 지사의 가장 최근 커밋에 있습니다. 커밋 'b54fe7'을 체크 아웃하고 마스터가 해당 커밋을 가리킨다 고해서 마스터 브랜치에 있다는 것을 의미하지는 않습니다. 같은 커밋을 가리키는 여러 가지가있을 수 있습니다. HEAD가 가리키는 것이 있다면 '켜져 있습니다'.
Jason Goemaat

8

현재 지점의 변경 사항을 푸시하면됩니다.

git push origin

분기 ' B'변경 사항을 ' origin/B'으로 푸시합니다 .
당신이 당신의 master지점 에 있다면 , 자식은으로 푸시됩니다 origin/master.
실제로는에 일치하는 원격 분기가있는 로컬 분기의 모든 변경 사항을 푸시합니다 origin. 구성 설정 push.default에 의해 제어됩니다 . Pro Git 책에서 RefSpecs 푸시
도 참조하십시오 .


당신이보고있는 것은에서 원격 환매 특약의 모든 refspecs 나타내는 사이드 바있다 실험 GitX 포크GitX 프로젝트를 .

대체 텍스트

HEAD해당 원격에 대한 기본 분기를 지정합니다.
참조 git remote set-head맨 페이지를 :

리모트에 대한 기본 분기가 필요하지는 않지만 특정 분기 대신 리모트의 이름을 지정할 수 있습니다.
기본 분기를 위해이 예를 들어, origin설정되어 master, 다음 origin을 지정할 수 있습니다 당신은 일반적으로 지정합니다 곳 origin/master.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.