working directory
에는 기본적으로 깃 저장소에 존재하는 파일들이 전부 등록됩니다.
Staging Area
에는 커밋에 포함될 작업물들이 저장됩니다.
Repository
에는 커밋을 통해 확정된 작업물들이 저장됩니다.
Working Directory
는 내부적으로 tracked
, untracked
로 상태가 나눠집니다.
Working Directory 내 상태와 바뀌는 분기
Untracked
: 기본적으로 깃 초기화가 일어나면 모든 파일들은 깃의 관리대상이 아닙니다. Untracked 는 한 번도 깃에 의해 관리된 적 없는 상태를 의미합니다.
Tracked
: 한 번이라도 깃의 관리를 받아 깃에 의해 추적 받는 상태
Untracked -> Tracked
: git add 를 통해 Staging Area
에 저장되면 그때부터 깃에 의한 관리대상이 됩니다.(깃 관점에선 관리의 대상이 됨과 동시에 Staging Area
에 올라가 커밋의 대상이 됩니다. 이 상태를 Staging이라 하겠습니다.)
Tracked -> Untracked
: Staging
상태의 파일을 git restore 명령어를 통해 만들 수 있습니다.
restore 시 최신 working directory 의 최신 작업이 staging 상태의 이전 작업으로 대체됩니다. !최신작업 유실 가능
커밋되길 희망하는 변경작업들을 저장합니다.
Unstaging(Working Directory) -> Staging
:
git add 를 통해 가능합니다.
Staging -> Unstaging
:
Staging
상태의 작업물을 Unstaging
상태로 무르고 싶다면 git reset HEAD [파일이름] 명령어가 있습니다.
git reset (--mixed) HEAD
지정한 HEAD 커밋으로 상태를 되돌립니다. 기본적으로 --mixed 옵션이 동작해 Working Directory 에는 영향이 닿지 않아 Working Directory 에는 작업이 남게 됩니다.
• soft : 이 옵션은 HEAD를 지정된 커밋으로 이동시키지만, 스테이징 영역과 워킹 디렉토리는 그대로 유지합니다. 즉, 변경 사항은 스테이징된 상태로 남아 있어, 다시 커밋할 준비가 된 상태가 됩니다.
• mixed : 기본 옵션으로, HEAD를 지정된 커밋으로 이동시키고 스테이징 영역을 업데이트하여 변경 사항을 언스테이지드 상태로 만듭니다. 워킹 디렉토리는 변경되지 않으며, 수정된 파일들은 그대로 남아 있습니다
• hard : 이 옵션은 HEAD, 스테이징 영역, 그리고 워킹 디렉토리를 모두 지정된 커밋의 상태로 되돌립니다. 따라서 모든 변경 사항이 삭제되며, 복구할 수 없습니다.
커밋을 통해 Staging Area
에 있는 작업물들을 하나의 스냅샷으로 저장합니다.
Staging Area -> Repository
: