git : "branchname"과 "refs / heads / branchname"의 차이점


100

예를 들어 설명하는 것이 가장 좋습니다. 나는 저장소의 0.58 지점에 있으며 이것이 내가 어떻게 당기는 지입니다.

git pull origin 0.58

"git pull"을 호출하면 다음과 같이 표시됩니다.

ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.0.58.remote = <nickname>
    branch.0.58.merge = <remote-ref>
    remote.<nickname>.url = <url>
    remote.<nickname>.fetch = <refspec>

See git-config(1) for details.

해당 분기를 확인했을 때 옵션 (--track?)을 잊은 것 같습니다. 어쨌든, 나는 이것을 지금 설정했습니다.

git config branch.0.58.merge 0.58
git config branch.0.58.remote origin

그리고 이것은 작동하는 것 같습니다. 그런 다음 관심 때문에 이러한 설정에 대한 다른 분기를 살펴 보았습니다.

ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin

지금 궁금해서 "0.58"사이에 차이가 있습니까? 아니면 "refs / heads / 0.58"을 지정해야합니까?

정확히 차이점은 무엇입니까?


1
그냥 제목에 오타가 ADRESS합니다 (지금을 수정하여 오래된 제목으로 장난하지 않고) , 읽어야합니다 "심판 / 헤드 / BRANCHNAME를" , heads에 "S"로.
RomainValeri

답변:


131

A ref는 커밋을 가리키는 모든 것입니다 (예 : 브랜치 (헤드), 태그 및 원격 브랜치). .git/refs저장소에 세 가지 유형의 참조가 모두 있다고 가정하면 디렉토리 에 헤드, 원격 및 태그가 표시 됩니다.

refs/heads/0.580.58이라는 분기를 지정합니다 . ref가있는 네임 스페이스를 지정하지 않으면 git은 기본 네임 스페이스를 찾습니다. 이로 인해 0.58 만 사용하면 모호 할 수 있습니다. 0.58이라는 이름의 브랜치와 태그를 모두 가질 수 있습니다.


3
대단히 감사합니다. 이것은 매우 잘 설명합니다. 그런 이름이 붙은 태그가 없기 때문에 단순한 "0.58"로 작동했습니다.
Albert

1
맞습니다. 본질적으로 항상 완전히 괜찮지 만 안전하는 것이 좋습니다.
Cascabel

이 대답은 보물입니다. 마지막으로 누군가 힘내 설명하고 나는 그것을 즐긴다! 감사.
aderchox

9
여기에 명확성을 위해 그들 모두의 : refs/heads/refs/remotes/refs/tags/
짐 아호

42

궁금한 사람을 위해 git show-ref-Git v1.8.2.2 이후로 사용할 수있는은 로컬 저장소에있는 모든 참조를 표시합니다.


3
또한 git log --decorate=full역사에서 참고 문헌의 전체 이름을 표시합니다
galath

20

참조는, branchNameGIT는 사실을 확인하기 전에 완전히 해결 될 필요가있다. 완전히 확인 된 이름은입니다 refs/heads/branchName.

유명한 명령 중 하나가 git checkout branchName실제로 자동으로 완전히 해결하여 체크 아웃 할 위치를 식별합니다. 자동으로 수행되므로 우리는 스스로 완전히 작성하지 않습니다.

어떻게하나요? 여기를 보자

refname : 예 master, heads/master,refs/heads/master

상징적 인 참조 이름. 예를 들어 마스터는 일반적으로에서 참조하는 커밋 객체를 의미합니다 refs/heads/master. heads/master와 둘 다있는 경우 Git에게 의미하는 것을 tags/master명시 적으로 말할 수 있습니다 heads/master. 모호한 <refname>경우 다음 규칙에서 첫 번째 일치 항목을 가져옴으로써 a 가 명확 해집니다.

설치 1. $GIT_DIR/<refname>당신이 무슨 뜻인지입니다 존재는, (이것은 단지에 일반적으로 유용 HEAD, FETCH_HEAD, ORIG_HEAD, MERGE_HEADCHERRY_PICK_HEAD);

2. refs/<refname>그렇지 않으면 존재하는 경우

3. refs/tags/<refname>그렇지 않으면 존재하는 경우

4. refs/heads/<refname>그렇지 않으면 존재하는 경우

5. refs/remotes/<refname>그렇지 않으면 존재하는 경우;

6. refs/remotes/<refname>/HEAD그렇지 않으면 존재하는 경우.

따라서 위의 6 단계를 통해이 문제를 해결하려고합니다 branchName. 따라서 완전히 해결 된 branchName을 제공 할 필요가 없습니다.

여기여기도 보세요 .

또한 .git디렉토리 로 이동 하여 ref폴더 내부를 확인하십시오 .

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