01-git-fundamentals.md에서 감질나게 다루던
스테이징(Staging) 과 커밋(Commit) 에 대해 자세히 알아보자.
Git에서 파일을 수정하면, 그 변경 사항은 곧바로 기록되지 않는다.
Git은 “무엇을 기록할 것인지”를 사용자가 직접 선택하도록 설계된 도구이기 때문이다.
한 번 비유를 들어보자.
사진기사가 사진을 찍기 위해 4인 가족을 촬영한다고 가정하자.
사진을 찍기 전, 사진기사는 사진에 담을 사람들만 무대 위로 올린다.
이 과정이 바로 스테이징이다.
그리고 준비가 끝난 뒤, 사진기사가 셔터를 눌러 사진을 찍는 행위가 바로 커밋이다.
즉,
- 스테이징은 무대 위에 올릴 사람을 고르는 과정
- 커밋은 그 순간을 사진으로 남기는 행위
에 해당한다.
왜 이런 단계가 필요할까?
작업 영역에서는 파일 수정이 매우 자유롭게 이루어진다.
예를 들어, 여동생이 아직 화장을 하고 있는 중이라면
그 화장 과정 자체를 사진으로 남기고 싶지는 않을 것이다.
Git도 마찬가지다.
작업 중인 모든 변경 사항을 무분별하게 기록하지 않기 위해,
이번에 기록할 변경만 선별하는 단계가 필요하며
그 역할을 수행하는 것이 스테이징이다.
결국 커밋은
특정 시점의 의미 있는 변경 사항을 남겨두는 스냅샷
이라고 볼 수 있다.
스테이징(Staging)은 작업 영역에서 발생한 변경 사항 중, 이번에 기록할 내용을 선택하는 과정이다.
git add 명령을 통해 선택된 파일들은 스테이징 영역(Staging Area) 에 올라가며,
이 영역에 올라간 변경 사항만이 커밋의 대상이 된다.
스테이징이 존재하기 때문에,
- 작업 중인 파일 전체가 자동으로 기록되지 않고
- 의미 없는 중간 과정은 제외한 채
- 의도한 변경만 정확히 커밋할 수 있다.
커밋(Commit)은 스테이징 영역에 올라간 변경 사항을 하나의 이력으로 저장하는 작업이다.
커밋이 생성되면 해당 시점의 프로젝트 상태가 하나의 스냅샷으로 기록되며,
이후 언제든지 해당 시점의 상태를 확인하거나 되돌릴 수 있다.
사진 비유로 보면,
- 스테이징이 준비 과정이라면
- 커밋은 셔터를 눌러 사진을 찍는 순간
이다.
따라서 커밋은 아무 때나 남기는 것이 아니라,
의미 있는 변경 단위마다 남기는 기록이어야 한다.
Git의 기본 흐름은 다음과 같다.
-
작업 영역(Working Area)
파일을 자유롭게 수정하는 공간 -
스테이징 영역(Staging Area)
이번에 기록할 변경 사항을 선택하는 공간 -
저장소(Repository)
선택된 변경 사항이 커밋으로 기록되는 공간
즉,
작업 → 스테이징(선택) → 커밋(기록)
이라는 흐름으로 Git은 변경 이력을 관리한다.
# 변경된 파일을 스테이징 영역에 추가
git add file.txt
# 스테이지 위에 올라간 파일, 폴더 등을 확인 할 수 있다.
git status
# 스테이징된 변경 사항을 커밋으로 기록
git commit -m "Add feature description"이 두 명령어의 역할을 정확히 구분해서 사용하는 것이 Git을 제대로 사용하는 첫 번째 단계이다.
