📌 Git은 내부적으로 크게 3가지 종류의 작업 영역을 가지고 있다.
- working directory
- staging area
- repository
1. working directory (working tree)
- 첫 번째 작업영역인 working directory는 작업을 하는 프로젝트 디렉토리를 말한다.
- .git 디렉토리를 제외한 모든 영역이다.
2. staging area (index)
- 두 번째 작업영역인 staging area는 git add를 한 파일들이 존재하는 영역이다.
- 이 곳에 있는 파일들만 커밋에 반영된다.
3. repository
- working directory의 변경 이력들이 저장되어 있는 영역이다.
즉, 커밋들이 저장되는 영역이다. - .git 디렉토리가 repository이다.
작업 영역의 관계
- working directory에서 A.txt 파일과 B.txt 파일을 작성하고
- git add A.txt와 git add B.txt를 실행해서 staging area에 올라간다.
- git commit -m "1st commit"을 실행해서
staging area에 있던 파일들의 모습이 스냅샷처럼 하나의 버전으로 Repository에 저장된다.
예시)
- working directory에서 A, B.txt의 내용을 추가하고
- git add B.txt만 실행해서 B.txt 파일만 staging area에 올렸을 때
- git commit -m "2nd commit"을 하면
A.txt는 수정전, B.txt는 수정후 파일이 커밋에 반영되었다.
❗❗ 즉 working directory에서 수정을 해도 staging area에 올렸는지 여부에 따라
그 최신 모습이 커밋에 반영되는지가 달라진다.
📌 Git으로 관리되는 파일은 4가지의 상태(status)를 가지고 있다.
- Untracked
- Staged
- Unmodified
- Modified
Git에서 파일들은 크게 2가지 상태를 가진다.
- Untracked
- Tracked
그리고 Tracked 상태는 다시 3가지 상태로 나눌 수 있다.
- Staged
- Unmodified
- Modified
1. Untracked
- Untracked는 '추적되지 않고 있는'이라는 뜻으로
파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태 - 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않은 상태를
Untracked라고 한다.
2. Tracked
- 파일이 Git에 의해 그 변동사항이 추적되고 있는 상태
- Tracked 상태는 그 특성에 따라 3가지 상태로 나뉜다.
2-1. Staged
- staging area에 올라와있는 상태를 말한다.
새로 생성한 파일에 내용을 쓰고 git add를 해주거나,
한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고 git add를 해주면 이 상태이다.
2-2. Unmodified
- 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태면
그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태이다. - 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태이다.
2-3. Modified
- 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면
그 파일은 Modified(수정된) 상태이다.
파일의 라이프사이클
상황설명
Add the file | Untracked 상태의 파일을 처음으로 git add 해주면 Staged 상태가 된다. |
Edit the file | 최신 커밋과 비교했을 때 차이가 없는 Unmodified 상태의 파일의 내용을 수정하면 Modified 상태가 된다. |
Stage the file | Modified 상태의 파일을 git add 해주면 Staged 상태가 된다. |
Remove the file | 파일을 삭제하면 Git에서 더이상 인식하지 못하는 Untracked 상태가 된다. |
Commit | 커밋을 하면 staging area에 있던 파일들이 커밋에 반영되고, 이제 모든 파일들은 최신 커밋과 차이가 없게 되니까 Unmodified 상태가 된다. |
출처
'git' 카테고리의 다른 글
[Git] 머지(Merge) 종류 (merge commit, squash, rebase, fast-forward) (0) | 2024.09.21 |
---|---|
[Git] 이전 커밋으로 되돌리기(reset, revert) 비교 및 사용법 정리 (1) | 2024.09.21 |
[Git] fetch 와 Pull 의 차이점 (1) | 2024.09.21 |
[Git] Git을 이용한 협업: Fork 부터 Pull Request 까지 (1) | 2024.09.21 |
[Git] Git 브랜치 전략 (feat. Git Flow) (0) | 2024.09.21 |