질문 : Git에서 HEAD, 작업 트리 및 인덱스의 차이점은 무엇입니까?
누군가 Git에서 HEAD, 작업 트리 및 인덱스의 차이점을 말할 수 있습니까?
내가 이해하는 바에 따르면 그들은 모두 다른 지점의 이름입니다. 내 가정이 맞습니까?
나는 이것을 찾았다
단일 git 저장소는 임의의 수의 브랜치를 추적 할 수 있지만 작업 트리는 브랜치 중 하나 ( "현재"또는 "체크 아웃"브랜치)에만 연결되고 HEAD는 해당 브랜치를 가리 킵니다.
이것은 HEAD와 작업 트리가 항상 동일하다는 것을 의미합니까?
답변
해당 주제에 대한 몇 가지 다른 좋은 참고 자료 :
색인을 체크 포인트 로 사용합니다.
내가 잘못 될 수있는 변화를 만들려고 할 때-내가 따라갈 수 있는지 또는 개념적으로 요구되는 리팩토링이나 변경과 같은 좋은 아이디어인지 확실하지 않은 방향을 탐색하고 싶을 때 표시 유형 — 내 작업을 색인에 체크 포인트합니다.
이것이 마지막 커밋 이후 처음으로 변경 한 경우 로컬 저장소를 체크 포인트로 사용할 수 있지만 종종 일련의 작은 단계로 구현하는 개념적 변경 사항이 하나 있습니다.
각 단계 후에 체크 포인트를 원하지만 테스트 된 코드로 돌아갈 때까지 커밋을 저장합니다.
메모:
- 작업 공간 은보고 편집하는 (소스) 파일의 디렉토리 트리입니다.
- 인덱스
<baseOfRepo>/.git/index
있는 하나의 큰 바이너리 파일로, 현재 브랜치의 모든 파일, sha1 체크섬, 타임 스탬프 및 파일 이름을 나열합니다. 그 안에 파일. - 로컬 저장소 는 압축 된 "blob"파일로 저장소에있는 모든 파일의 모든 버전 (로컬 브랜치 및 원격 브랜치의 복사본)을 포함하는
objects
디렉터리를 포함하는 숨겨진 디렉터리 (.git
위의 이미지에 표시된 4 개의 '디스크'를 저장소 파일의 개별 복사본으로 생각하지 마십시오.
기본적으로 Git 커밋에 대한 명명 된 참조입니다. ref에는 태그와 헤드의 두 가지 주요 유형이 있습니다.
- 태그는 v2.6.29와 같이 기록의 특정 지점을 표시하는 고정 참조입니다.
- 반대로 머리는 항상 프로젝트 개발의 현재 위치를 반영하기 위해 움직입니다.
(참고 : Timo Huovinen의 주석 에 따르면 해당 화살표는 커밋이 가리키는 것이 아니라 워크 플로 순서 이며 기본적으로 화살표를 1 -> 2 -> 3 -> 4
여기서 1
은 첫 번째 커밋이고 4
는 마지막입니다)
이제 우리는 프로젝트에서 무슨 일이 일어나고 있는지 알고 있습니다.
그러나 바로 여기에서 무슨 일이 일어나고 있는지 알기 위해 HEAD라는 특별한 참조가 있습니다. 두 가지 주요 목적을 제공합니다.
- 체크 아웃 할 때 파일을 가져올 커밋을 Git에 알려줍니다.
- 커밋 할 때 새 커밋을 넣을 위치를 Git에 알려줍니다.
git checkout ref
를 실행하면 HEAD
가 지정한 참조를 가리키고 여기에서 파일을 추출합니다. git commit
을 실행하면 HEAD
의 자식이되는 새 커밋 객체가 생성됩니다. 일반적으로 HEAD
는 헤드 중 하나를 가리 키므로 모든 것이 잘 작동합니다.
출처 : https://stackoverflow.com/questions/3689838/whats-the-difference-between-head-working-tree-and-index-in-git
'개발관련 > Git' 카테고리의 다른 글
Git 로컬 분기 삭제 실행 취소하는 방법 (0) | 2021.12.08 |
---|---|
git 저장소에서 하나의 파일만 체크 아웃하는 방법 (0) | 2021.12.08 |
Git 사용시 "Error: bad index – Fatal: index file corrupt"해결 방법 (0) | 2021.12.06 |
Windows 에서 Git Bash의 속도를 높이는 방법. (0) | 2021.12.06 |
Git에서 단계화 되지 않은 변경 사항을 폐기하는 방법 (0) | 2021.12.06 |