Git

[git] git workflow, git status & diff 정리

leejunkim 2025. 5. 23. 22:37

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