sourcecode

HEAD GIT은 무엇입니까?

copyscript 2023. 5. 9. 22:55
반응형

HEAD GIT은 무엇입니까?

디렉토리에서 볼 수 있는 마지막 커밋, HEAD 및 파일 상태가 다른 것 같습니다.

HEAD란 무엇이며, 이를 통해 무엇을 할 수 있으며, 어떤 실수를 피해야 합니까?

HEAD는 현재 체크아웃된 분기의 마지막 커밋에 대한 참조입니다.


이에 대한 약간의 예외가 있는데, 바로 분리된 HEAD입니다.분리된 HEAD는 분기 대신 커밋(또는 태그)을 체크아웃할 때마다 발생하는 상황입니다.이 경우 이름이 없는 임시 분기로 상상해야 합니다. 따라서 명명된 분기 참조가 있는 대신 HEAD만 있습니다.이 경우에도 커밋을 수행할 수 있으므로(HEAD가 업데이트됨), 분리된 HEAD를 이름이 없는 임시 분기로 생각하는 경우에도 위의 짧은 정의는 여전히 유효합니다.

HEAD현재 체크아웃된 커밋에 대한 참조(참조)입니다.

정상 상태에서는 실제로 체크아웃한 분기에 대한 상징적인 참조입니다. .git/HEAD의 내용을 보면 "ref: refs/heads/master"와 같은 것을 볼 수 있습니다.분기 자체는 분기 끝에 있는 커밋에 대한 참조입니다.따라서 정상 상태에서는HEAD효과적으로 현재 분기의 끝에 있는 커밋을 나타냅니다.

또한 "분리된 HEAD"를 가질 수도 있습니다.원격 분기, 특정 커밋 또는 태그와 같은 (로컬) 분기 이외의 항목을 체크아웃할 때 이 문제가 발생합니다.이것을 볼 수 있는 가장 일반적인 장소는 커밋을 편집하도록 선택한 대화형 기본 재배치 중입니다.분리된 HEAD 상태에서 HEAD는 커밋에 대한 직접적인 참조이며, .git/HEAD의 내용은 SHA1 해시가 됩니다.

일반적으로 HEAD는 "체크아웃한 것"을 의미하는 편리한 이름일 뿐이며, 실제로는 크게 걱정할 필요가 없습니다.체크아웃한 내용만 알고 있어야 하며, 분기(헤드 분리 상태)에 있지 않은 경우(예: 대화형 리베이스에 있는 경우)에는 커밋하고 싶지 않을 수도 있습니다.

문서에서 이 페이지를 보는 것이 좋습니다.

Gitas 시스템은 정상적인 작동에서 세 개의 트리를 관리하고 조작합니다.(여기서 "트리"는 데이터 구조가 아니라 "파일 모음"을 의미합니다.)

HEAD다음과 같습니다.

나무 역할. 내 설명
머리글 마지막 커밋 스냅샷, 다음 [미래] 상위 항목 돌 속에 저장된 무언가.완전 녹화.다음 레코드/커밋의 상위 레코드가 됩니다.
색인 제안된 다음 커밋 스냅샷 종이에 저장된 것.돌에 영구적으로 기록될 가능성이 높습니다.용지를 제거/변경할 수 있습니다.스톤에 저장된 레코드/커밋과 달리 용지를 제거하거나 변경하면 이전 상태에 대한 레코드가 없습니다.
작업 디렉터리 샌드박스 놀이터 환경.여기서부터 여러분은 종이에 무언가를 저장할지 결정합니다. 그래서 나중에 돌에 저장할 수 있습니다.

HEAD는 현재 분기 참조에 대한 포인터이며, 이는 해당 분기에서 수행된 마지막 커밋에 대한 포인터입니다.

즉, HEAD가 생성되는 다음 커밋의 상위 항목이 됩니다.HEAD는 일반적으로 해당 분기에 대한 마지막 커밋의 스냅샷이라고 생각하는 것이 가장 간단합니다.

tldr HEAD는 커밋 사이에 항상 사용자를 이동시키기 때문에 스테이징 단계나 샌드박스 사이를 이동하는 데 도움이 되지 않습니다.

추가 설명

나는 항상 생각했습니다.HEAD~5이전에 5개 커밋으로 이동하는 것을 의미합니다.하지만 명령의 GO 부분은 포함되지 않습니다.명령의 참조 부분만 전달합니다.

해당 참조를 사용하여 수행할 수 있는 작업은 선택한 명령에 따라 다릅니다.

일반적인 용어로 "어디로 가야 합니까?"라는 질문에 답하는 데 사용됩니다.어떤 약속에?

  • HEAD에 대한 커밋을 합니다.
  • HEAD~1에 1 커밋(을 의미합니다
  • HEAD~AND는 또한 (에 대한 참조) 앞에 1 커밋을 의미합니다.
  • HEAD~87는 (에 대한) 87 합니다.
  • HEAD~3..HEAD커밋까지의 총커밋)3.3 커밋의 경우 (3 커밋)

용도:

  • git checkout HEAD~11 commit에 놓이게 됩니다.
  • git reset HEAD~3변경 사항을 제거하지 않고 마지막 3개의 커밋을 해제합니다. 즉, 최근 3개의 커밋에서 변경된 내용을 모두 함께 확인하고, 마음에 들지 않는 내용을 제거하거나 추가한 다음 모두 다시 커밋할 수 있습니다.
  • git reset --hard HEAD~3마지막 커밋을 해제하고 변경 사항을 제거합니다.변경 사항이 완전히 제거됩니다.자세한 내용은 여기를 참조하십시오.
  • git diff HEAD~3의 커밋의 .
  • git diff someFile HEAD~3 사항을 합니다.
  • git revert --no-commit HEAD~3..HEAD자동으로 커밋하지 않고 3개의 커밋을 되돌립니다. 즉, 다음 작업을 수행해야 합니다.git commit -m네 자신.자세한 내용은 여기를 참조하십시오.
  • git rev-parse HEAD~2이전의 두 커밋의 SHA를 출력합니다.
  • 풀 요청과 메인 간의 모든 변경 사항을 확인합니다.이것은 다단계 과정입니다.
git fetch origin/feature22
git checkout feature22
git merge-base feature22 main # will return the SHA of their 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git reset 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

당신은 그냥 할 수 있습니다.git reset main그러나 끌어오기 요청을 만든 동료가 main에서 최신 변경 사항을 변경한 경우에만 작동합니다.큰 기능을 개발 중이고(그리고 며칠 동안 메인 기능과 병합하지 않음) 메인 기능에서 마지막으로 끌어낸 후 어떤 추가 기능이 있는지 확인하려면 위의 단계를 따라야 합니다.


또한 분리된 HEAD란 무엇인가에 대한 이 답변이 표시되는지 확인합니다.

에 대한 좋은 정보가 있습니다.cat .git/HEAD


범위를 벗어났지만 매우 흥미롭습니다.

에 외HEAD다른 종류의 머리들이 있습니다. 수정사항 참조:

ORIG_HEAD

ORIG_HEAD는 이하는명의생성다니됩을 이동하는 됩니다.HEAD, 위를치단극▁of▁in▁the▁the.HEAD할 수 위해 분기를 실행하기 전의 로 다시 변경할 수 있습니다.

실행 취소 방법git merge

git reset --hard ORIG_HEAD

병합_HEAD

기존 병합을 완료하기 전에 다시 병합을 시도한 후 이 오류 메시지가 표시됨

fatal: 병합을 완료하지 않았습니다(MERGE_HEAD가 존재함).병합하기 전에 변경 사항을 커밋하십시오.

이 문제를 해결하기 위해, 저는 합병을 마쳐야 했습니다.그런 다음 다시 병합합니다.

FETCH_HEAD

원격 저장소에서 가져온 분기를 마지막 GitFetch 호출과 함께 기록합니다.

체리_픽_헤드

가 할 때 합니다.git cherry-pick.

자세한 내용은 이 다른 답변 및 문서참조하십시오.

Git의 HEAD 포인터

Git는 HEAD라는 기준 변수를 유지 관리합니다.그리고 우리는 이 변수를 포인터라고 부릅니다. 왜냐하면 이 변수의 목적은 저장소의 특정 커밋을 참조하거나 가리키는 것이기 때문입니다.새 커밋을 만들 때 포인터가 변경되거나 이동하여 새 커밋을 가리킵니다.HEAD는 항상 저장소의 현재 분기 끝을 가리킵니다.자, 이것은 우리의 저장소와 관련이 있습니다. 우리의 준비 인덱스나 작업 디렉터리가 아닙니다.

다른 방법으로는 저장소의 마지막 상태 또는 마지막으로 체크아웃한 상태를 생각할 수 있습니다. 이 상태는 저장소가 중단된 위치 또는 마지막 상태이기 때문에 HEAD가 다음 커밋 또는 커밋 쓰기가 수행될 위치의 상위를 가리킨다고 할 수도 있습니다.

제가 생각하기에 좋은 비유는 카세트 테이프 레코더의 재생과 녹음 헤드입니다.오디오 녹음을 시작하면 테이프가 헤드를 지나 테이프에 녹음됩니다. Stop(중지)를 누르면 레코드 헤드가 중지된 위치가 다시 녹음을 시작합니다.이제 우리는 이동할 수 있고, 머리를 다른 곳으로 이동할 수 있지만, 머리가 위치한 곳에서 다시 기록을 누르면 기록이 시작됩니다.

Git의 HEAD 포인터는 매우 유사합니다. 다음에 녹음을 시작할 위치를 가리킵니다.이곳은 우리가 저지른 일들을 위해 우리의 저장소에 남겨둔 곳입니다.

간단히 말해 HEAD는 현재 체크아웃 지점의 마지막 커밋에 대한 참조입니다.

HEAD를 "현재 분기"라고 생각합니다.깃 체크아웃으로 분기를 전환하면 HEAD 개정판이 새 분기의 끝을 가리키도록 변경됩니다.

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

cat .git/HEAD

HEAD가 지점 이름과 연관되지 않은 특정 리비전을 참조할 수 있습니다.이러한 상황을 분리 HEAD라고 합니다.

기본적으로 HEAD는 현재 분기의 마지막 커밋을 가리키는 포인터/참조입니다.

이 두 가지 명령을 사용하여 이를 확인할 수 있습니다.

$ git log -1

commit 9883e13257f2e7555eb6e3b14b2c814978c75692 (HEAD -> MyLocalBranch)
Author: vikram <vikramguptavit@gmail.com>
Date:   Sun Oct 11 23:32:45 2020 -0400
this is my last commit message

이제 아래 명령을 사용하여 HEAD가 가리키는 위치를 확인합니다.

$ git rev-parse HEAD
9883e13257f2e7555eb6e3b14b2c814978c75692

보시다시피 이 두 커밋 해시는 동일합니다.따라서 HEAD는 항상 현재 분기의 최신/마지막 커밋을 가리킵니다.

언급URL : https://stackoverflow.com/questions/2529971/what-is-the-head-in-git

반응형