git

Git 2.30+

매일 쓰는 Git 명령어 빠른 참조: init, clone, branch, merge, rebase, reset, stash, 원격 작업, 히스토리 조회와 자주 쓰는 옵션, 실전 예시를 함께 정리했습니다.

명령어 31개

시작하기

git init

현재 디렉터리에 새 Git 저장소를 만듭니다.

git init my-project
git clone <url>

원격 저장소와 전체 히스토리를 로컬로 복제합니다.

--depth 1 얕은 클론(최신 커밋만); -b <branch> 특정 브랜치만 클론

git clone -b main --depth 1 https://github.com/user/repo.git
git config

사용자 이름, 이메일 등을 설정합니다. --global 은 모든 저장소에 적용됩니다.

git config --global user.name "Your Name" && git config --global user.email "[email protected]"

자주 쓰는 작업

git status

작업 트리의 상태(수정/스테이지/추적 안 됨)를 보여줍니다.

-s 짧은 형식; -b 브랜치 정보 표시

git status -sb
git add <file>

다음 커밋에 포함할 파일 변경을 스테이지합니다.

-A 모든 변경; -p 인터랙티브 헝크 선택; -u 추적된 파일만 스테이지

git add -p src/index.ts
git commit

스테이지한 변경을 메시지와 함께 커밋합니다.

-m 메시지 인라인; -a 추적 파일 스테이지 후 커밋; --amend 마지막 커밋 다시 쓰기

git commit -am "fix: 빈 입력 처리"
git diff

작업 트리/스테이지/커밋 간의 줄 단위 차이를 보여줍니다.

--staged 마지막 커밋과의 차이; <branch> 브랜치와 비교; --stat 요약만 표시

git diff --staged --stat
git restore <file>

커밋하지 않은 작업 트리 변경을 되돌립니다(--staged 를 함께 쓰면 스테이지를 해제).

git restore --staged src/index.ts

브랜치

git branch

브랜치를 조회·생성·삭제합니다.

-d 삭제; -D 강제 삭제; -m 이름 변경; -a 원격 브랜치도 함께 표시

git branch -m old-name new-name
git switch <branch>

다른 브랜치로 이동합니다. -c 를 쓰면 필요 시 브랜치를 만듭니다(checkout 의 현대적 대체).

git switch -c feature/login
git merge <branch>

다른 브랜치를 현재 브랜치에 병합합니다.

--no-ff 항상 병합 커밋 생성; --abort 진행 중인 병합 취소

git merge --no-ff feature/login
git rebase <branch>

현재 브랜치의 커밋을 다른 브랜치 끝으로 재배치해 선형 히스토리를 만듭니다.

-i 인터랙티브(squash/reword/reorder); --abort 취소; --continue 충돌 해결 후 계속

git rebase -i HEAD~3

원격

git remote -v

설정된 원격 저장소와 URL 을 나열합니다.

git remote add origin https://github.com/user/repo.git
git fetch

원격에서 객체와 참조를 내려받되 병합하지는 않습니다.

--prune 오래된 원격 추적 브랜치 제거; --all 모든 원격에서 가져오기

git fetch --prune origin
git pull

원격에서 가져온 뒤 현재 브랜치로 병합(또는 rebase)합니다.

--rebase merge 대신 rebase; --ff-only fast-forward 만 허용

git pull --rebase origin main
git push

로컬 커밋을 원격 저장소로 업로드합니다.

-u 업스트림 추적 설정; --force-with-lease 더 안전한 강제 푸시; --tags 태그도 함께 푸시

git push -u origin feature/login

되돌리기 · 수정

git reset

HEAD 를 다른 커밋으로 이동하며, 옵션으로 스테이지/작업 트리도 함께 조정합니다.

--soft 변경을 스테이지에 유지; --mixed(기본) 변경을 작업 트리에 유지; --hard 모두 폐기

git reset --hard HEAD~1
git revert <commit>

이전 커밋을 되돌리는 새 커밋을 만듭니다. 공유 히스토리에 안전합니다.

git revert HEAD
git commit --amend

가장 최근 커밋을 다시 씁니다: 메시지를 고치거나 빠뜨린 변경을 추가합니다.

--no-edit 기존 메시지 유지

git commit --amend --no-edit
git clean

작업 트리에서 추적되지 않는 파일을 삭제합니다.

-n 미리 보기; -f 강제; -d 디렉터리 포함; -x 무시된 파일 포함

git clean -ndx

히스토리 · 조회

git log

커밋 히스토리를 봅니다.

--oneline 한 줄 표시; --graph 브랜치 그래프; -p diff 표시; -n 개수 제한

git log --oneline --graph -15
git show <commit>

커밋의 메시지와 diff 를 보여줍니다. 태그나 파일에도 사용 가능(git show HEAD:file).

git show HEAD~2 --stat
git blame <file>

파일의 각 줄을 마지막으로 수정한 사람과 커밋을 표시합니다.

-L n,m 지정한 줄 범위로 제한

git blame -L 10,20 src/index.ts
git reflog

HEAD 의 이동 기록을 보여줍니다 — 잘못된 reset/rebase 후 잃어버린 커밋을 복구할 때 유용합니다.

git reflog -20

Stash

git stash

커밋하지 않은 변경을 임시로 치워 놓고 작업 트리를 깨끗하게 만듭니다.

-u 추적되지 않은 파일 포함; push -m 메시지; list 모든 stash 표시

git stash push -u -m "wip: 로그인 폼"
git stash pop

가장 최근 stash 를 다시 적용하고 stash 목록에서 제거합니다.

apply 적용 후 stash 항목을 유지

git stash apply stash@{1}

태그 · 릴리스

git tag

릴리스 지점을 표시하는 태그를 조회·생성·삭제합니다.

-a 주석 태그; -m 메시지; -d 삭제

git tag -a v1.2.0 -m "Release 1.2.0"
git describe --tags

현재 커밋에서 가장 가까운 태그와 그 거리(커밋 수)를 보여줍니다.

git describe --tags --always

고급

git cherry-pick <commit>

지정한 커밋의 변경을 현재 브랜치에 적용합니다.

-n 적용만 하고 커밋은 하지 않음; -x 커밋 메시지에 원본 해시 기록

git cherry-pick -x a1b2c3d
git bisect

이분 탐색으로 버그가 도입된 커밋을 찾습니다.

start / bad / good / run <cmd> / reset

git bisect start && git bisect bad && git bisect good v1.0.0
git worktree add <path> <branch>

같은 저장소를 공유하면서 다른 디렉터리에 다른 브랜치를 체크아웃합니다.

git worktree add ../hotfix hotfix/urgent-bug

관련 명령어 치트시트

Git 소개

Git은 Linus Torvalds가 2005년 4월 BitKeeper 라이선스 분쟁 이후 Linux 커널 소스 트리를 관리하기 위해 만든 무료 오픈 소스 분산 버전 관리 시스템입니다. 모든 작업 디렉터리가 자체 기록을 가진 완전한 저장소이므로, 커밋·분기·병합은 로컬에서 이루어지고 `git push`를 해야만 서버로 올라갑니다 — 이것이 Git이 빠르고 수천 명의 개발자가 오프라인으로 작업할 수 있는 이유입니다. 현재 안정 버전은 Git 2.40+입니다. Git은 콘텐츠 주소 지정 파일 시스템(SHA-1, 곧 SHA-256으로 전환)으로 데이터를 저장하며, `commit`·`tree`·`blob`·`tag` 네 종류의 객체를 사용합니다. 인덱스를 통한 스테이징, 값싼 분기, 리베이스, bisect, 서브모듈, worktree, GPG/SSH 서명된 커밋 등을 지원합니다. 소스 코드 관리의 사실상 표준으로 오픈 소스 프로젝트와 기업 양쪽에서 사용됩니다. 기록·분기·협업이 필요한 모든 곳에서 사용하고, 리뷰 전에 `git rebase -i`로 커밋을 다듬으며, "사라진" 작업은 `git reflog`로 복구할 수 있습니다. Git은 커밋하지 않은 비공개 정보를 업로드하지는 않지만, 커밋한 것은 모두 기억하므로 공개 호스트로 푸시하기 전에 `git filter-repo`로 민감한 데이터를 정리하세요.

치트시트 버전 1.0.0