자식의 머리는 무엇입니까? 커밋, HEAD

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

HEAD 란 무엇이며 어떻게해야합니까? 그리고 어떤 실수를 피해야합니까?



답변

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


여기에는 분리 된 HEAD 인 작은 예외가 있습니다. 분리 HEAD는 당신이 체크 아웃 할 때마다에 결국 상황이다 커밋 대신 지점 (또는 태그). 이 경우 이름이없는 임시 지점으로 생각해야합니다 . 명명 된 분기 참조를 갖는 대신 HEAD 있습니다. 여전히 커밋을 수행 할 수 있으므로 (HEAD 업데이트) 분리 된 HEAD를 이름이없는 임시 분기로 생각하면 위의 짧은 정의는 여전히 참입니다.


답변

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

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

“분리 된 HEAD”를 가질 수도 있습니다. 이것은 원격 브랜치, 특정 커밋 또는 태그와 같이 (로컬) 브랜치 이외의 것을 체크 아웃 할 때 발생합니다. 이를 확인하는 가장 일반적인 장소는 커밋을 편집 할 때 대화식 리베이스 동안입니다. 분리 된 HEAD 상태에서 HEAD는 커밋에 대한 직접적인 참조입니다. .git / HEAD의 내용은 SHA1 해시입니다.

일반적으로 HEAD는 “체크 아웃 한 항목”을 의미하는 편리한 이름 일 뿐이므로 걱정할 필요가 없습니다. 체크 아웃 한 것을 알고, 브랜치에 있지 않은 경우 (분리 된 HEAD 상태) 커밋을 원하지 않을 것입니다 (예 : 대화식 리베이스에 있음). .


답변

나는 항상 HEAD~55 커밋에 가기를 의미 한다고 생각했다 . 그러나 명령의 GO 부분을 수행하지는 않습니다. 명령 의 참조 / ‘where to’ 부분 만 전달합니다 .

: 평신도 측면에서이 질문에 대답하는 데 사용 내가 가야를? 어느 커밋에?

  • HEAD 현재 커밋을 의미합니다.
  • HEAD~1 1 커밋 전 (참조)
  • HEAD~ ALSO는 (1) 커밋 전을 의미합니다.
  • HEAD~87 87 커밋 전에 의미 (참조)

용법:

  • git checkout HEAD~1 실제로 1 커밋 / 참조 전에 GO / 체크 아웃합니다.
  • git reset HEAD~3 변경 사항을 제거하지 않고 마지막 3 개의 커밋을 커밋 해제합니다. 즉, 마지막 3 개의 커밋에서 이루어진 모든 변경 사항을 함께 볼 수 있고, 마음에 들지 않거나 추가하지 않은 것을 제거하고 다시 커밋 할 수 있습니다.
  • git reset --hard HEAD~3마지막 커밋을 해제 하고 변경 사항을 제거합니다 . 변경 사항이 완전히 제거됩니다. 자세한 내용은 여기를 참조 하십시오 .
  • git diff HEAD~3 마지막 3 개의 커밋의 변경 사항 확인

답변

Git의 HEAD 포인터

힘내 HEAD라는 참조 변수를 유지합니다. 그리고 우리는이 변수를 포인터라고 부릅니다. 왜냐하면 그 목적은 저장소의 특정 커밋을 참조하거나 가리 키기 때문입니다. 새로운 커밋을 만들 때 포인터는 새로운 커밋을 가리 키도록 변경되거나 이동합니다. HEAD는 항상 우리 저장소의 현재 브랜치 팁을 가리 킵니다. 이제 이것은 준비 색인이나 작업 디렉토리가 아닌 저장소와 관련이 있습니다.

그것을 생각하는 또 다른 방법은 저장소의 마지막 상태 또는 마지막으로 체크 아웃 한 것입니다. 저장소가 중단 된 곳이나 마지막 상태이기 때문에 HEAD가 다음 커밋의 부모를 가리 키거나 말할 수 있습니다. 커밋 작성이 진행되는 곳.

카세트 테이프 레코더의 재생 및 레코드 헤드라고 생각하면 좋은 비유라고 생각합니다. 오디오 녹음을 시작하면 테이프가 헤드를 지나서 녹음됩니다. Stop을 누르면 레코드 헤드가 중지 된 곳이 Record를 두 번 누르면 다시 레코딩을 시작하는 위치입니다. 이제 이동할 수 있고 헤드를 다른 위치로 이동할 수 있습니다. 녹음을 다시 누르면 녹음이 시작됩니다.

Git의 HEAD 포인터는 매우 유사하므로 다음에 녹음을 시작할 위치를 가리 킵니다. 그것은 우리가 저지른 것들을 위해 우리 저장소에서 중단 한 곳입니다.


답변

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

HEAD를 “현재 분기”로 생각하십시오. git checkout으로 분기를 전환하면 HEAD 개정이 새 분기의 끝을 가리 키도록 변경됩니다.

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

cat .git/HEAD

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


답변