빠른 흐름
git add <file>
git commit -m "의도를 설명하는 메시지"
git push기본 흐름
어떤 기본 흐름을 먼저 떠올리면 되나
| 상황 | 먼저 떠올릴 선택 |
|---|---|
| 특정 파일만 다음 커밋에 포함 | git add <file> |
| 일부 hunk만 선택해 스테이징 | git add -p |
| 스테이징된 내용을 로컬 히스토리에 기록 | git commit -m "..." |
| 새 브랜치를 처음 원격에 올리기 | git push -u origin <branch> |
| 이미 추적 중인 브랜치 업데이트 | git push |
스테이징은 커밋 내용을 정확히 제어하는 유일한 수단이다
Git은 수정한 파일을 자동으로 커밋하지 않습니다. 반드시 git add로 스테이징 영역(인덱스)에 올려야 다음 커밋에 포함됩니다. 이 설계의 핵심 이점은 하나의 작업 세션에서 여러 변경을 했을 때, 논리적으로 관련된 파일만 선택해 커밋을 분리할 수 있다는 점입니다. git add .는 편하지만 모든 변경을 한꺼번에 스테이징하기 때문에, 의도하지 않은 파일(디버그 코드, 임시 파일)이 같이 들어가기 쉽습니다.
git add src/auth.js # 특정 파일만 스테이징
git add src/ # 디렉터리 단위
git add -p # 줄(hunk) 단위로 선택해 스테이징
git status # 스테이징 결과 확인커밋은 blob/tree/commit 객체로 저장되는 영구 스냅샷이다
git commit은 단순히 파일을 저장하는 것이 아닙니다. Git은 스테이징된 파일 내용을 blob 객체로, 디렉터리 구조를 tree 객체로, 그리고 작성자/타임스탬프/부모 커밋 SHA를 담은 commit 객체를 생성합니다. 이 객체들은 내용 기반 SHA-1 해시로 식별되며 한 번 저장되면 변경이 불가능합니다. 커밋 메시지에 "무엇을 바꿨는가" 보다 "왜 바꿨는가"를 적어 두면 나중에 git log나 git blame으로 맥락을 파악하는 데 훨씬 유리합니다.
git commit -m "Fix null check in auth token validation"
# 좋은 예: 이유가 드러남
git commit -m "Fix bug"
# 나쁜 예: 나중에 어떤 버그인지 알 수 없음push는 로컬 커밋을 원격 ref로 전송하고 상대방이 fetch할 수 있게 만든다
git push는 로컬 브랜치의 커밋 객체들을 원격 저장소에 전송하고, 원격의 해당 브랜치 ref를 갱신합니다. Git은 원격에 없는 객체만 전송하므로 이미 공유된 커밋은 다시 보내지 않습니다. 처음 push하는 브랜치라면 -u 옵션으로 원격 추적 브랜치를 설정해야 이후 git push, git pull을 인자 없이 쓸 수 있습니다.
git push -u origin feature/login # 처음 push: 원격 추적 브랜치 설정
git push # 이후 push: 인자 생략 가능git add <file>과 git add .는 편의성과 통제력의 교환이다
작업이 작고 한 파일에 집중되어 있으면 git add <file>이 가장 안전합니다. 반대로 한 번에 정리된 작은 작업을 끝냈다면 git add .가 빠릅니다. 문제는 .env, 빌드 산출물, 디버그 로그처럼 커밋되면 안 되는 파일까지 같이 들어가기 쉽다는 점입니다. 범위가 넓을수록 git add .보다 파일 지정 또는 git add -p가 더 안전합니다.
git add src/auth.js
git commit -m "Fix auth token parsing"
# 빠르지만 범위를 넓게 잡음
git add .
git status
git diff --staged체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 논리적으로 분리된 변경을 별도 커밋으로 만들 때 | git add <file> 또는 git add -p |
| 현재 변경 전체를 빠르게 스테이징할 때 | git add . (단, 확인 필요) |
| 로컬 히스토리에 스냅샷을 남길 때 | git commit -m "..." |
| 처음 브랜치를 원격에 올릴 때 | git push -u origin <branch> |
| 이미 추적 중인 브랜치를 업데이트할 때 | git push |
주의할 점
git add .는 작업 디렉터리의 모든 변경을 스테이징합니다. .env, 빌드 산출물, 디버그용
임시 파일이 함께 들어갈 수 있습니다. 커밋 전에는 반드시 git status와 git diff --staged로
실제로 들어갈 내용을 확인하는 습관이 필요합니다. 이미 push한 커밋에서 비밀 정보가 발견되면
히스토리 재작성과 비밀값 교체까지 필요해지는 큰 비용이 생깁니다.
# 첫 push
git push -u origin feature/login
# 이후 같은 브랜치에서는
git push참고 링크
3 sources