Git의 3가지 작업 영역
내용을 수정한 파일 중에서 커밋에 반영하고 싶은 파일은 git add를 해야한다.
Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다.
각 작업 영역의 이름은
- working directory
- staging area
- repository
입니다. 순서대로 하나씩 설명해드릴게요.
첫 번째 작업 영역인 working directory는 개발자가 작업을 하는 프로젝트 디렉토리
두 번째 작업 영역인 staging area는 git add를 한 파일들이 존재하는 영역. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영된다.
세 번째 작업 영역인 repository는 working directory의 변경 이력들이 저장되어 있는 영역. 즉, 커밋들이 저장되는 영역
조금 풀어서 설명해보자면,
- working directory에서 뭔가 작업을 하고,
- 작업한 파일들을 git add 해주어 staging ara에 올려주고,
- 커밋을 하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면인 스냅샷(snapshot)처럼 이 repository에 저장된다.
working directory 안에 숨겨져 있던 .git 디렉토리가 repository역할을 하고 있는 것이다.

왼쪽부터 순서대로 working directory, staging area, repository가 있다. 다음과 같은 작업을 한 상태를 나타내는 그림인데.
- working directory에서 A.txt 파일과 B.txt 파일을 작성하고
- git add A.txt와 git add B.txt를 실행해서 A.txt, B.txt 둘다 staging area에 올렸다.
- 그 다음 git commit -m "Ver_1"를 실행해서 staging area에 있는 파일들을 가져와 커밋으로 남겼다.

이전 그림에서 작업을 좀더 하고 나서의 모습으로
- working directory에서 A.txt 파일 내용에 Python~이라는 단어를 추가, B.txt 파일 내용에 Morning!이라는 단어를 추가했다.
- 그런데 이번에는 git add B.txt만 실행해서 B.txt 파일만 staging area에 올렸다.
- 그 다음 git commit -m "Ver_2"로 두 번째 커밋을 했다.
이전 그림과 다른 점은 A.txt는 staging area에 올리지 않고, B.txt만 staging area에 올렸다는 점.
Ver_2 커밋을 보면 지금
- A.txt는 staging area에 있던 모습, 그러니까 수정하기 이전의 모습이 Ver_2 커밋에 반영되었고
- B.txt도 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영되었다.
A.txt, B.txt 둘다 working directory에서 수정했다는 사실은 같지만, staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지가 달라지는 것.
staging area가 필요한 이유
working directory에서 작업을 하고 git add할 필요없이 바로 커밋해버리는 구조가 더 편하지 않아?
하지만 꼭 그렇지는 않다. 방금처럼 A.txt와 B.txt 파일을 둘다 수정했더라도 두 파일 모두 그 최신 모습을 다음 커밋에 반영하고 싶지 않을 수도 있다. 방금처럼 B.txt의 최신 모습만 그 다음 커밋에 반영하고 싶을 수도 있다. 만약 staging area가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없다. 그럼 좀더 세밀한 버전 관리를 할 수 없는 것이다.