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 |