Git의 FETCH_HEAD는 무엇을 의미합니까?
git pull --help
말한다 :
기본 모드에서 git pull은 git fetch의 약어이며 git merge FETCH_HEAD입니다.
이것은 FETCH_HEAD
무엇이며 실제로 합병되는 것은 무엇 git pull
입니까?
FETCH_HEAD
원격 저장소에서 가져온 내용을 추적하기위한 단기 참조입니다. 보통은 원격에서 브랜치를 가져 오는 git pull
첫 번째 호출 git fetch
; FETCH_HEAD
이 분기의 끝을 가리 킵니다 (분기와 마찬가지로 커밋의 SHA1을 저장합니다). git pull
그런 다음 현재 분기에 git merge
병합하여을 호출합니다 FETCH_HEAD
.
결과는 정확히 예상 한 것입니다. 적절한 원격 분기의 끝에있는 커밋이 현재 분기의 끝에있는 커밋에 병합됩니다.
이것은 git fetch
인수 (또는 git remote update
)를 사용 하지 않고 모든 원격 브랜치를 업데이트 한 다음 실행 git merge origin/<branch>
하지만 FETCH_HEAD
내부적으로 내부 참조를 사용 하여 이름을 지정할 필요없이 가져온 단일 참조를 가져 오는 것과 약간 비슷 합니다 .
FETCH_HEAD는 해당 페치가 페치 명령을 사용하여 직접 시작되었는지 풀의 일부로 시작되었는지에 관계없이 마지막 페치의 팁에 대한 참조입니다. FETCH_HEAD의 현재 값은 .git
폴더에 이름이 지정된 파일로 저장됩니다 FETCH_HEAD
.
그래서 내가 발행하면 :
git fetch https://github.com/ryanmaxwell/Fragaria
FETCH_HEAD는 다음을 포함 할 수 있습니다
3cfda7cfdcf9fb78b44d991f8470df56723658d3 https://github.com/ryanmaxwell/Fragaria
원격 저장소를 원격 추적 지점으로 구성한 경우 추적 지점을 병합하여 가져 오기를 수행 할 수 있습니다. 그렇지 않으면 FETCH_HEAD를 사용하여 마지막 페치 팁을 직접 병합 할 수 있습니다.
git merge FETCH_HEAD
Jonathan의 답변 에서 언급했듯이 FETCH_HEAD는 파일에 해당합니다 .git/FETCH_HEAD
. 일반적으로 파일은 다음과 같습니다.
71f026561ddb57063681109aadd0de5bac26ada9 branch 'some-branch' of <remote URL>
669980e32769626587c5f3c45334fb81e5f44c34 not-for-merge branch 'some-other-branch' of <remote URL>
b858c89278ab1469c71340eef8cf38cc4ef03fed not-for-merge branch 'yet-some-other-branch' of <remote URL>
하나를 제외한 모든 가지가 어떻게 표시되는지 확인하십시오 not-for-merge
. 이상한 점은 가져 오기 전에 체크 아웃 한 지점입니다. 요약하면 : FETCH_HEAD는 기본적으로 현재 체크 아웃 된 분기의 원격 버전에 해당합니다.
나는 방금 발견하고 사용했습니다 FETCH_HEAD
. 서버에서 일부 소프트웨어의 로컬 사본을 원했고
git fetch gitserver release_1
gitserver
git 저장소를 저장하는 내 컴퓨터의 이름입니다. release_1
소프트웨어 버전의 태그입니다. 놀랍게도 release_1
내 로컬 컴퓨터에서 찾을 수 없었습니다. 나는 입력해야했다
git tag release_1 FETCH_HEAD
원격 저장소에서 로컬로 태그 지정된 커밋 체인 (release_1) 의 사본을 완료합니다 . 가져 오기는 내 로컬 컴퓨터에 커밋 복사, 원격 태그를 발견했다고 하지 않았 로컬 태그를 만들었지 만 설정했다 FETCH_HEAD
내가 찾아서 사용할 수 있도록 커밋의 값. 그런 다음 FETCH_HEAD
리모컨의 태그와 일치하는 로컬 태그를 만들었습니다. 그것은 무엇이 무엇 FETCH_HEAD
이고 어떻게 사용될 수 있는지에 대한 실용적인 그림이며 , git fetch가 왜 순진하게 기대하는 것을하지 않는지 궁금해하는 다른 사람에게 유용 할 수 있습니다.
내 의견으로는 그것은 그 목적을 위해 피하는 것이 가장 좋으며 내가하려는 것을 성취하는 더 좋은 방법은
git fetch gitserver release_1:release_1
즉, release_1을 가져 와서 release_1을 로컬로 호출합니다. (출처 : dest, https://git-scm.com/book/en/v2/Git-Internals-The-Refspec 참조 ; 다른 이름을 지정하려는 경우를 대비하여!)
FETCH_HEAD
그래도 때때로 사용하고 싶을 수도 있습니다 .
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
Git 서버에서 버그 수정 번호 1234를 사용하고 수정 사항이 현재 지점에서 체리 픽 선택되면 Git의 가비지 콜렉션을 남겨 서버에서 사본을 처리하는 좋은 방법 일 수 있습니다. (서버에 버그 수정 전체가 포함 된 멋진 태그 지정 커밋이 있다고 가정합니다!)
git pull은 페치와 병합의 조합입니다. git fetch가 발생하면 FETCH_HEAD에서 가져온 것의 헤드 커밋 (.git에 해당 이름의 파일 만)을 기록한 다음 이러한 커밋이 작업 디렉토리에 병합됩니다.
참고 URL : https://stackoverflow.com/questions/9237348/what-does-fetch-head-in-git-mean
'IT' 카테고리의 다른 글
NoSQL 데이터 저장소를 사용하여 어떤 확장 성 문제가 발생 했습니까? (0) | 2020.05.14 |
---|---|
github에서 검색하여 정확히 일치하는 항목을 얻는 방법 (예 : Google의 인용 부호) (0) | 2020.05.14 |
파이썬에서 메모리 사용량을 어떻게 프로파일합니까? (0) | 2020.05.14 |
Python의 zip 함수와 동등한 Javascript (0) | 2020.05.14 |
파이썬에서 객체가 얼마나 많은 메모리를 사용하고 있는지 알아보십시오 (0) | 2020.05.14 |