3 가지 영역
깃 워크플로우는 기본적으로 3가지 영역으로 나뉘어져있다.
[Working Directory] → [Staging Area] → [Repository]
1. Working Directory (작업 디렉토리)
- 현재 내가 파일을 다루는 (수정,삭제 등) 디렉토리이다.
- 내가 작업한 내용물들을 git add <파일> 혹은 git add . (다 올리기)로 이 staging area로 보낼 수 있다.
2. Staging Area
- Git이 다음 커밋에 포함할 파일을 미리 골라두는 장소다.
- 깃 리포에 저장이 되기 전에 올라가는 '임시 저장소'라고 보면 된다.
- staging 하지 못한 파일들은 commit할 수 없다!
- 내가 작업한 내용물들을 git add <파일> 혹은 git add . (다 올리기)로 이 staging area로 보낼 수 있다.
3. Repository (git repo)
- 실제로 커밋되어 버젼 기록이 저장이 되는 공간이다 (임시저장소를 거쳐서 저장이 되는 영역이 바로 여기다).
- 이 git repo는 git init 명령어로 만들어지는데, 내가 원하는 만큼 git repo를 내 컴퓨터 안에 생성할 수 있다. (다만, git init을 한 폴더 안에 또 git init을 하는 것은 권장되지 않는다).
# 1. 작업 디렉토리에서 파일 생성 및 수정
touch hello.txt
echo "Hello World" > hello.txt
# 2. 스테이징 영역에 올리기
git add hello.txt
# 3. 저장소에 커밋
git commit -m "Add hello world"
git status
이 명령어를 사용하면 수정된 파일, 스테이징된 파일, 추적되지 않은 파일 등을 볼 수 있다.
예를 들면, working area에 수정된 파일이 있고 (hello.txt) 그 파일이 아직 staging area올라가지 않은 상태면, 빨강색 글씨가 뜰 것이다:

이제 git add hello.txt 명령어를 해주고 다시 git status를 쳐보면 초록색 글씨가 뜬다. 초록색 글씨가 떴다면 해당 파일은 staging area에 성공적으로 올라갔다는 뜻이다:

마지막으로, git repo에 저장하려면 git commit -m "edit hello.txt"와 같이 메세지와 함께 커밋을 해준다. 다시 git status를 입력해보면 아무것도 뜨지 않는 것을 볼 수가 있다:

이 메세지가 보인다면 모든 변경사항이 커밋되어서 git 저장소와 동기화 된 상태라는 뜻이다.
대략:
🔴 빨간색 -> [working directory에 있음] 아직 Staging 안 됨 (git add 필요)
🟢 초록색 -> [Staging Area에 올라감] 커밋 대기 중 (git commit)
와 같이 이해하면 편할 것 같다.
git diff
git diff 명령어는 뭔가 복잡해보이지만 사실 꽤 간단한 명령어라고 생각한다.
단순히 working directory와 staging area의 차이점을 알려준다 => 아직 git add하지 않는 차이점이다!
예를 들면 아무것도 들어가지 않은 빈 파일 hello.txt를 만들고 git add hello.txt 를 실행했으면, staging area에는 그 똑같은 버젼인 hello.txt가 있을 것이다.
이 상태에 git diff를 하면 아무것도 나오지 않는다.
touch hello.txt # 새로운 파일 생성
git add hello.txt # staging area에 넣음
git commit -m "add hello" # repo에 넣음
git diff # 아무것도 안뜸
하지만 이후, hello.txt를 수정하고 git diff를 확인해보면 결과가 다르다. 예를 들면,
echo "Hello World!" > hello.txt
git diff
이렇게 working directory에서 파일을 수정해주고 add를 하지 않고 git diff를 하면,

이런식으로 조금 무서운(?) 문자가 뜨는데 무서워하지 말자.
이렇게 이해하면 된다:
- a/hello.txt: Staging Area 버전
- b/hello.txt: Working Directory 버전
- -로 시작하는 줄: Staging에는 있는데 Working에는 없는 줄 (여기선 없음)
- +로 시작하는 줄: Working에만 있는 줄 (Hello World!)
즉, Hello World!가 추가되었는데 아직 git add를 하지 않았기 때문에 그 차이가 보여지는 거다.
이 외에도 git diff는 다양한 argument를 넣어서 많은 방식으로 사용 가능하지만 이 포스팅에선 다루지 않겠다.
'Git' 카테고리의 다른 글
| [git] merge VS rebase (1) | 2025.05.27 |
|---|---|
| [github] fork, upstream & pull request 간단히 이해하기 (4) | 2025.05.24 |
| [github] fetch VS pull (+origin) (0) | 2025.05.23 |
| [git] Local congifuration 정리 (0) | 2025.05.23 |