Git 작업 공간, 준비 영역 및 저장소
기본 개념
Git 작업 공간, 준비 영역 및 저장소의 개념을 먼저 이해합시다
작업 공간: 컴퓨터에서 볼 수 있는 디렉터리입니다.
임시 저장 공간: 영어로는 stage, index라고 합니다. 일반적으로 "git 디렉터리" 하위의 인덱스 파일(.git/index)에 저장되므로 임시 저장 영역을 인덱스(index)라고 부르기도 합니다.
저장소: 작업 공간에는 숨겨진 디렉터리 .git이 있습니다. 이것은 작업 공간이 아니라 Git 저장소입니다.
다음 그림은 작업 공간, 저장소의 준비 영역 및 저장소 간의 관계를 보여줍니다.
그림의 왼쪽은 작업 공간이고 오른쪽은 저장소입니다. 저장소에서 "index"라고 표시된 영역은 Staging 영역(스테이지, 인덱스)이고, "master"라고 표시된 영역은 master 브랜치가 나타내는 디렉터리 트리입니다.
그림에서 "HEAD"는 실제로 마스터 브랜치를 가리키는 "커서"임을 알 수 있습니다. 따라서 그림의 명령어에서 HEAD가 나타나는 부분을 master로 대체할 수 있다.
사진에서 개체로 식별되는 영역은 Git의 개체 라이브러리로 실제로는 ".git/objects" 디렉터리에 위치하며 생성된 다양한 개체와 콘텐츠가 포함되어 있습니다.
워크스페이스에서 수정(또는 추가)된 파일에 대해 "git add" 명령을 실행하면 스테이징 영역의 디렉터리 트리가 업데이트되고, 워크스페이스에서 수정(또는 추가)된 파일의 내용이 기록됩니다. 새로운 객체에는 객체 라이브러리가 저장되며, 객체의 ID는 임시 저장 영역의 파일 인덱스에 기록됩니다.
커밋 작업(git commit)을 수행하면 스테이징 영역의 디렉터리 트리가 버전 라이브러리(객체 라이브러리)에 기록되고 그에 따라 마스터 브랜치가 업데이트됩니다. 즉, master가 가리키는 디렉토리 트리는 제출 당시의 임시 저장 영역의 디렉토리 트리이다.
"git Reset HEAD" 명령이 실행되면 스테이징 영역의 디렉토리 트리가 다시 작성되고 마스터 브랜치가 가리키는 디렉토리 트리로 대체되지만 작업 공간에는 영향을 미치지 않습니다.
"git rm --cached <file>" 명령이 실행되면 파일은 스테이징 영역에서 직접 삭제되며 작업공간은 변경되지 않습니다.
"git checkout ." 또는 "git checkout -- <file>" 명령이 실행되면 작업 공간의 파일이 스테이징 영역의 전체 또는 지정된 파일로 대체됩니다. 이 작업은 위험하며 준비 영역에 추가되지 않은 작업 공간의 변경 사항을 지웁니다.
"git checkout HEAD ." 또는 "git checkout HEAD <file>" 명령이 실행되면 HEAD가 가리키는 마스터 브랜치의 파일 전체 또는 일부가 스테이징 영역의 파일을 대체하는 데 사용됩니다. 작업 공간. 이 명령은 작업 공간에서 커밋되지 않은 변경 사항을 지울 뿐만 아니라 준비 영역에서 커밋되지 않은 변경 사항도 지우기 때문에 매우 위험합니다.