Git은 변경된 파일을 자동으로 커밋하지 않습니다.
커밋하려면 반드시 추적(tracking) 과정을 거쳐야 하며, 이 과정에서 자주 사용하는 명령어가 바로 add, status, rm입니다.
이번 글에서는 Git에서 파일을 추가하고, 변경 상태를 확인하고, 필요한 파일을 제거하는 일련의 흐름을 명확하게 정리해보겠습니다.
파일 변경 흐름 이해하기
Git은 파일을 다음과 같은 세 가지 단계로 구분해서 관리합니다.

- Working directory (작업 디렉터리)
.git 디렉터리를 제외한 모든영역으로 사용자가 작업하는 디렉터리입니다. - *Staging area (스테이징 영역)
*git add를 한 파일들은 staging 상태로 올라가게 되는데, 이 곳에 있는 파일들만 커밋에 반영됩니다. - *Repository (저장소)
*working directory의 변경 이력들이 저장되어있는 영역입니다.
변경된 파일을 Git에 반영하려면, 작업 디렉터리 → 스테이징 → 커밋 이라는 흐름을 따라야 합니다.
사용자가 Working directory에서 파일을 작성하고 난 후에는 git add 를 통해 파일 및 폴더들을 Staging area에 올려야 합니다.
이후 git commit 을 실행하면, Staging area에 있던 파일들의 상태가 스냅샷처럼 하나의 버전으로 Repository에 저장됩니다.
즉, Working directory에서 작업을 하더라도, 해당 변경사항을 Staging area에 올리지 않았다면, commit 시 Repository에 반영되지 않습니다.
이러한 구조를 이해하고 있어야 커밋이 예상한 대로 이루어졌는지를 정확히 판단할 수 있습니다.
add - 변경 파일을 Staging 영역에 올리기
Git은 수정된 모든 파일을 자동으로 커밋하지 않습니다.
커밋하고 싶은 파일만 골라서 스테이징 영역에 올려야 할 때, 사용하는 명령어가 git add입니다.
#특정 파일 스테이징
git add [파일명]
#모든 변경사항 스테이징
git add .
#삭제된 파일까지 포함한 전체 스테이징
git add -A
#일부 변경만 선택적으로 스테이징, 변경된 부분을 하나식 보여주고 스테이징 여부 선택
git add -p app.js
기본적으로 스테이징 영역에 올리면 안되는 파일인 .env, .properties 등은 .gitignore에 추가하고 add 대상에서 제외해야 합니다.
status - 현재 파일의 상태 확인하기
git status는 현재 Git 저장소의 상태를 보여주는 명령어입니다.
수정된 파일, 스테이징된 파일, 추적되지 않은 파일 등을 확인할 수 있습니다.
git status
# On branch main
# Changes not staged for commit:
# modified: index.html
#
# Untracked files:
# newfile.txt
Git이 파일을 인식하는 방식
Git은 파일을 아래의 네 가지 상태 중 하나로 인식합니다.
| 파일 상태 | 설명 |
| Untracked | 파일이 Git에 의해 변경사항이 추적되지 않고 있는 상태로, 파일을 생성하고 그 파일을 한번도 git add 하지 않은 상태입니다. |
| Tracked - Unmodified | Git이 추적중이며, 가장 최근 커밋 이후 수정되지 않은 상태입니다. 특별한 표시 없이 그대로 유지됩니다. |
| Tracked - Modified | Git이 추적 중이며, 수정되었지만 아직 Staging area에 추가되지 않은 상태 입니다. |
| Staged | git add에 의해 파일이 Git에 의해 변동사항이 추적되고 있는 상태로, git commit 시 Staged 상태의 파일만 저장소에 반영됩니다. |
Git은 파일이 어떤 상태에 있느냐에 따라 커밋에 포함되는지 여부를 판단합니다.
예를 들어, Working directory에서 파일을 수정했더라도, git add를 하지 않으면 Repository에는 반영되지 않습니다.
rm - Git에서 파일 제거하기
프로젝트에서 파일을 삭제할 일이 생겼다면, Git에게도 삭제한 파일을 명확히 알려줘야 합니다.
그럴 때 사용하는 명령어가 git rm 입니다.
git rm [파일명]
#해당 파일은 로컬에서도 삭제되고, Git에서도 제거됩니다.
git rm app.js
#Git에서는 제거하되, 로컬 파일은 유지
#보통 이 작업은 .gitignore에 포함된 파일이 이미 스테이징 영역에 커밋된 상태에서 사용합니다.
git rm --cached application.properties
git rm --cached .
- 실수로 원격 레포지토리에 민감한 정보가 공유되지 않도록,
.gitignore와git rm --cached는 세트로 활용하는 것이 좋습니다. - 실수로 커밋한 파일을 복구하고 싶다면,
git reflog나git checkout HEAD~1등으로 이전 상태 복구가 가능합니다.
Git에서 파일을 관리한다는 것은 단순히 파일을 커밋하는 것이 아니라, 어떤 파일이, 어떤 상태로, 어떤 시점에 저장소에 반영될지를 명확하게 제어하는 과정입니다.
add, status, rm 세 가지 명령어를 정확히 이해하고 사용하는 것만으로도, Git을 훨씬 더 신뢰할 수 있는 버전 관리 도구로 활용할 수 있습니다.
'DevOps > Git' 카테고리의 다른 글
| [Git] 원격 저장소와 동기화 : fetch, pull, push (0) | 2025.04.18 |
|---|---|
| [Git] 변경 이력 관리 : commit, log, diff, show (0) | 2025.04.17 |
| [Git] Git 저장소 생성 및 연결 : init, clone, remote (0) | 2025.04.15 |
| [Git] Git 설치 및 초기 설정 : config (0) | 2025.04.14 |
| [Git] Git이란 무엇인가요? (0) | 2025.04.13 |