Git - CheatSheet
요약
빠른 참고용 Git 핵심 명령어 모음
- 작업 흐름: init/clone → add → commit → push
- 브랜치 작업: switch/checkout, merge, rebase, cherry-pick
- 되돌리기/정리: restore, reset, clean, stash, reflog
용도: 필요한 명령어를 즉시 찾는 실전 치트시트
참고 자료
Git 설정
| 작업 | 명령어 | 설명 |
|---|---|---|
| 사용자 이름 | git config user.name "<user_name>" | 로컬 사용자 이름 설정 |
| 전역 설정 | git config --global ... | 전역 설정 적용 |
| alias 설정 | git config alias.st status | st 단축 명령 설정 |
| 설정 옵션 | man git-config | 가능한 옵션 확인 |
시작하기
| 작업 | 명령어 | 설명 |
|---|---|---|
| 새 저장소 | git init | 현재 디렉터리를 저장소로 초기화 |
| 저장소 복제 | git clone <repo_url> | 원격 저장소 전체 히스토리 복제 |
커밋 준비
| 작업 | 명령어 | 설명 |
|---|---|---|
| 파일 스테이징 | git add <file> | 파일을 스테이징 |
| 전체 스테이징 | git add . | 변경 파일 전체 스테이징 |
| 일부 스테이징 | git add -p | 파일 일부만 선택 스테이징 |
| 파일 이동 | git mv <old_path> <new_path> | 파일 이동/이름 변경 |
| 파일 삭제 | git rm <file> | 파일 삭제 후 스테이징 |
| 추적만 제거 | git rm --cached <file> | 파일은 남기고 추적만 제거 |
| 스테이징 해제 | git reset <file> | 파일 스테이징 해제 |
| 전체 스테이징 해제 | git reset | 전체 스테이징 해제 |
| 상태 확인 | git status | 스테이징/변경 상태 확인 |
커밋하기
| 작업 | 명령어 | 설명 |
|---|---|---|
| 커밋 | git commit | 편집기로 메시지 작성 |
| 커밋(메시지) | git commit -m "<commit_message>" | 메시지 지정 커밋 |
| 커밋(추가 포함) | git commit -am "<commit_message>" | 스테이징 없이 수정 파일 커밋 |
브랜치 이동
| 작업 | 명령어 | 설명 |
|---|---|---|
| 브랜치 전환 | git switch <branch_name> | 브랜치 전환 |
| 브랜치 전환(레거시) | git checkout <branch_name> | 브랜치 전환 |
| 브랜치 생성 | git switch -c <branch_name> | 브랜치 생성 후 전환 |
| 브랜치 생성(레거시) | git checkout -b <branch_name> | 브랜치 생성 후 전환 |
| 브랜치 목록 | git branch | 브랜치 목록 표시 |
| 최근 커밋순 목록 | git branch --sort=-committerdate | 최신 커밋 기준 정렬 |
| 브랜치 삭제 | git branch -d <branch_name> | 병합된 브랜치 삭제 |
| 브랜치 강제 삭제 | git branch -D <branch_name> | 강제 삭제 |
스테이징/미스테이징 변경 비교
| 작업 | 명령어 | 설명 |
|---|---|---|
| 전체 diff | git diff HEAD | 스테이징/작업 디렉터리 모두 비교 |
| 스테이징 diff | git diff --staged | 스테이징된 변경 비교 |
| 작업 디렉터리 diff | git diff | 스테이징 전 변경 비교 |
커밋 비교
| 작업 | 명령어 | 설명 |
|---|---|---|
| 부모와 diff | git show <commit_ref> | 커밋과 부모 차이 표시 |
| 커밋 간 diff | git diff <commit_ref_a> <commit_ref_b> | 두 커밋 비교 |
| 파일 diff | git diff <commit_ref> <file_path> | 특정 파일 비교 |
| 요약 diff | git diff <commit_ref> --stat | 요약 diff |
| 요약 show | git show <commit_ref> --stat | 요약 show |
커밋 참조 방법
| 표현 | 예시 | 설명 |
|---|---|---|
| 브랜치 | main | 브랜치가 가리키는 최신 커밋 참조 |
| 태그 | v0.1 | 특정 커밋에 고정된 이름 |
| 커밋 ID | <commit_sha> | 커밋의 고유 해시(축약 가능) |
| 원격 브랜치 | <remote_name>/<branch_name> | 원격 저장소의 브랜치 참조 |
| 현재 커밋 | HEAD | 현재 체크아웃된 커밋 |
| 과거 커밋 | HEAD^^^ 또는 HEAD~3 | 현재에서 3단계 이전 커밋을 참조 |
변경 사항 되돌리기
| 작업 | 명령어 | 설명 |
|---|---|---|
| 변경 취소 | git restore <file_path> | 워킹 디렉터리 변경 취소 |
| 변경 취소(레거시) | git checkout <file_path> | 워킹 디렉터리 변경 취소 |
| 스테이징+워킹 취소 | git restore --staged --worktree <file_path> | 스테이징과 워킹 취소 |
| 스테이징+워킹 취소(레거시) | git checkout HEAD <file_path> | HEAD 기준으로 복원 |
| 전체 되돌리기 | git reset --hard | 스테이징/워킹 모두 초기화 |
| 추적되지 않은 파일 삭제 | git clean | 추적되지 않은 파일 삭제 |
| 스태시 저장 | git stash | 변경 사항 임시 저장 |
히스토리 수정
| 작업 | 명령어 | 설명 |
|---|---|---|
| 최근 커밋 취소 | git reset HEAD^ | 워킹 유지, 이전 커밋으로 이동 |
| 커밋 합치기 | git rebase -i HEAD~<count> | 최근 n개 커밋 합치기 |
| 리베이스 복구 | git reflog <branch_name> | 실패한 리베이스 복구 탐색 |
| 리셋 복구 | git reset --hard <commit_ref> | reflog에서 찾은 커밋으로 복구 |
| 커밋 메시지 수정 | git commit --amend | 최근 커밋 메시지 수정 |
코드 히스토리 탐색
| 작업 | 명령어 | 설명 |
|---|---|---|
| 브랜치 히스토리 | git log <branch_name> | 브랜치 로그 |
| 그래프 로그 | git log --graph <branch_name> | 그래프 형태 로그 |
| 한 줄 로그 | git log --oneline | 요약 로그 |
| 파일 히스토리 | git log <file_path> | 파일 변경 로그 |
| 이름 변경 포함 | git log --follow <file_path> | 리네임 포함 추적 |
| 텍스트 변경 로그 | git log -G <pattern> | 특정 텍스트 변경 로그 |
| 라인 변경자 | git blame <file_path> | 라인별 변경자 확인 |
이전 파일 복원
| 작업 | 명령어 | 설명 |
|---|---|---|
| 과거 파일 복원 | git checkout <commit_ref> <file_path> | 특정 커밋의 파일 복원 |
| 과거 파일 복원 | git restore <file_path> --source <commit_ref> | restore로 복원 |
원격 저장소
| 작업 | 명령어 | 설명 |
|---|---|---|
| 원격 추가 | git remote add <remote_name> <repo_url> | 원격 저장소 등록 |
| push | git push <remote_name> <branch_name> | 브랜치 push |
| push(현재 브랜치) | git push | 추적 브랜치로 push |
| push(업스트림) | git push -u <remote_name> <branch_name> | 업스트림 지정 |
| 강제 push | git push --force-with-lease | 안전장치 있는 강제 push |
| 태그 push | git push --tags | 태그 push |
| fetch | git fetch <remote_name> <branch_name> | 원격 변경 가져오기 |
| pull(rebase) | git pull --rebase | fetch + rebase |
| pull(merge) | git pull <remote_name> <branch_name> 또는 git pull | fetch + merge |
중요 파일
| 파일 | 설명 |
|---|---|
.git/config | 로컬 Git 설정 |
~/.gitconfig | 전역 Git 설정 |
.gitignore | 무시 패턴 목록 |
분기된 브랜치 병합
| 작업 | 명령어 | 설명 |
|---|---|---|
| 리베이스 병합 | git switch <feature_branch> → git rebase <base_branch> | 브랜치 히스토리 정렬 |
| 머지 병합 | git switch <base_branch> → git merge <feature_branch> | 히스토리 보존 병합 |
| 스쿼시 머지 | git switch <base_branch> → git merge --squash <feature_branch> → git commit | 하나의 커밋으로 병합 |
| fast-forward | git switch <base_branch> → git merge <feature_branch> | 분기 없는 병합 |
| 체리픽 | git cherry-pick <commit_ref> | 특정 커밋만 가져오기 |
병합 다이어그램 (Mermaid)
리베이스 병합 (Before)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
리베이스 병합 (After)
gitGraph
commit id:"A"
commit id:"B"
commit id:"C"
branch banana
checkout banana
commit id:"D'"
commit id:"E'"
머지 병합 (Before)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
머지 병합 (After)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
merge banana id:"M"
스쿼시 머지 (Before)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
스쿼시 머지 (After)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
commit id:"DE"
fast-forward 머지 (Before)
gitGraph
commit id:"A"
commit id:"B"
commit id:"C"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
fast-forward 머지 (After)
gitGraph
commit id:"A"
commit id:"B"
commit id:"C"
commit id:"D"
commit id:"E"
체리픽 (Before)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
체리픽 (After)
gitGraph
commit id:"A"
commit id:"B"
branch banana
checkout banana
commit id:"D"
commit id:"E"
checkout main
commit id:"C"
commit id:"D'"
공유
이 글이 도움이 되었다면 다른 사람과 공유해주세요!