01-02 기본 명령어와 워크플로우

매일 쓰는 Git 명령어 — 변경을 만들고, 담고, 기록하고, 확인하는 일상 사이클.


매일 쓰는 Git 명령어 — 변경을 만들고, 담고, 기록하고, 확인하는 일상 사이클.

목표: 문서 없이 add → commit → push 사이클을 자유롭게 수행


🔄 일상 워크플로우 한눈에

graph LR
    EDIT["✏️ 편집"] --> ADD["git add<br/>(스테이징)"]
    ADD --> COMMIT["git commit<br/>(기록)"]
    COMMIT --> PUSH["git push<br/>(공유)"]
    STATUS["git status / diff<br/>(언제든 확인)"]

🔍 git status — 현재 상태

git status        # 변경 파일 + 스테이징 + 브랜치 정보
git status -s     # 짧은 형식
git status -sb    # 짧게 + 브랜치

-s 출력 읽는 법 (좌측=스테이징, 우측=작업 디렉토리):

 M file1.txt    # 수정됨, 미스테이징
M  file2.txt    # 수정됨, 스테이징됨
MM file3.txt    # 스테이징 후 또 수정
A  file4.txt    # 새로 추가(스테이징)
?? file5.txt    # untracked (추적 안 됨)
D  file6.txt    # 삭제됨

git add — 스테이징

git add file.txt        # 특정 파일
git add .               # 현재 폴더 이하 전체
git add -A              # 저장소 전체(삭제 포함)
git add *.js            # 패턴
git add -u              # 추적 중인 파일의 변경만
git add -p              # 변경을 조각(hunk) 단위로 선별 ⭐

[!tip] git add -p (patch 모드) 한 파일의 여러 변경 중 관련된 것만 골라 담아 커밋을 논리 단위로 분리한다.

  • y 담기 / n 건너뛰기 / s 더 쪼개기 / e 직접 편집 / q 종료

💾 git commit — 기록

git commit -m "feat: 로그인 추가"     # 한 줄 메시지
git commit                           # 에디터로 제목+본문
git commit -am "fix: 버그"            # 추적 파일 add + commit (untracked 제외)
git commit --amend                   # 마지막 커밋 수정
git commit --amend --no-edit         # 메시지 유지, 내용만 추가

좋은 커밋의 조건:

  • 하나의 논리적 변경 = 하나의 커밋
  • 제목은 50자 이내, 명령형 (“추가한다” 형태)
  • 빌드가 깨지지 않는 상태로 커밋

[!warning] --amend 주의 마지막 커밋을 고치는 게 아니라 해시가 바뀐 새 커밋으로 교체한다. 이미 push 한 커밋엔 사용하지 말 것(강제 push 필요).


📜 git log — 히스토리 보기

git log                            # 기본
git log --oneline                  # 한 줄씩
git log --oneline --graph --all    # 그래프로 전체 브랜치 ⭐
git log -3                         # 최근 3개
git log --stat                     # 파일별 변경량
git log -p file.txt                # 특정 파일 변경 내역
git log --author="Jongmin"         # 작성자 필터
git log --grep="로그인"             # 메시지 검색
git log --since="1 week ago"       # 기간 필터

출력 예시 (--oneline):

9f3a1c2 (HEAD -> main) feat: 로그인 추가
a1b2c3d fix: 널 체크
4d5e6f7 (origin/main) docs: README 수정

🔬 git diff — 변경 비교

git diff                # 작업 디렉토리 vs 스테이징 (아직 안 담은 변경)
git diff --staged       # 스테이징 vs 마지막 커밋 (담긴 변경)
git diff HEAD           # 작업 디렉토리 vs 마지막 커밋 (전부)
git diff --stat         # 변경량 요약
git diff --name-only    # 바뀐 파일 이름만
graph LR
    WD["작업 디렉토리"] -.->|"git diff"| STAGE["스테이징"]
    STAGE -.->|"git diff --staged"| HEAD["마지막 커밋"]
    WD -.->|"git diff HEAD"| HEAD

🗑️ 파일 삭제·이동

git rm file.txt           # 파일 삭제 + 스테이징
git rm --cached file.txt  # 추적만 해제(파일은 유지) — .gitignore 적용 시
git mv old.txt new.txt    # 이름 변경(= mv + add)

⚡ 자주 쓰는 별칭

git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.last "log -1 HEAD"
# 사용: git st / git lg / git last

📋 체크리스트

  • git status -s 출력 해석
  • git add -p로 부분 스테이징
  • 논리 단위로 git commit
  • --amend의 동작과 주의점
  • git log --oneline --graph --all 읽기
  • git diff vs --staged 차이
  • git rm --cached 용도
  • 별칭 설정

🔗 관련 노트

  • 01-01-Git-개념과-동작원리 — 이전: 영역 개념
  • 01-03-브랜치와-병합 — 다음: 브랜치
  • Git-상세-가이드 — 옵션 백과
  • 02-03-커밋-컨벤션과-시맨틱-버저닝 — 커밋 메시지 규칙

마지막 업데이트: 2026-06-02