EasyDebug.NET

Git 명령어 치트시트

스테이징부터 되돌리기까지 9개 시나리오와 실행 예시

명령어 69개

git init설정·초기화

현재 디렉터리에 저장소 생성

git init
git clone <url>설정·초기화

원격 저장소 복제

git clone git@github.com:user/repo.git
git config --global user.name "Ada"설정·초기화

커미터 이름 설정, 한 번만 설정하면 계속 적용

git config --global user.name "Ada"
git config --global user.email "ada@example.com"설정·초기화

커미터 이메일 설정, 커밋 기록에 포함됨

git config --global user.email "ada@example.com"
git config --global alias.st status설정·초기화

명령 별칭 정의, 입력 절약

git config --global alias.lg "log --oneline --graph"
git remote add origin <url>설정·초기화

로컬 저장소에 원격 주소 연결

git remote add origin git@github.com:user/repo.git
git status스테이징·커밋

작업 트리와 인덱스 상태 확인

git status -sb
git add <file>스테이징·커밋

지정 파일 변경을 스테이지에 추가

git add src/app.vue
git add -p스테이징·커밋

대화식으로 코드 조각만 스테이징, 커밋 분할에 유용

git add -p
git commit -m "msg"스테이징·커밋

스테이지된 내용 커밋

git commit -m "fix: 修正登录跳转"
git commit --amend스테이징·커밋

마지막 커밋 수정(메시지 또는 내용)

git commit --amend --no-edit
git restore --staged <file>스테이징·커밋

스테이지에서 제외하고 변경은 유지

git restore --staged src/app.vue
git rm --cached <file>스테이징·커밋

추적만 중단하고 로컬 파일은 유지

git rm --cached .env
git mv <old> <new>스테이징·커밋

파일 이름 변경을 Git에 기록

git mv old.ts new.ts
git branch브랜치·병합

로컬 브랜치 목록, *가 현재 브랜치

git branch -vv
git switch -c <name>브랜치·병합

새 브랜치를 만들고 전환

git switch -c feature/login
git switch <name>브랜치·병합

기존 브랜치로 전환

git switch main
git merge <branch>브랜치·병합

대상 브랜치를 현재 브랜치로 병합

git merge feature/login
git merge --no-ff <branch>브랜치·병합

패스트포워드를 막아 병합 커밋을 남김

git merge --no-ff feature/login
git merge --squash <branch>브랜치·병합

브랜치의 여러 커밋을 하나로 압축

git merge --squash feature/login
git rebase <branch>브랜치·병합

내 커밋을 대상 브랜치 위로 재배치, 이력이 선형이 됨

git rebase main
git rebase -i HEAD~3브랜치·병합

최근 세 커밋을 대화식으로 정리: 압축, 순서 변경, 메시지 수정

git rebase -i HEAD~3
git rebase --onto <new> <old> <branch>브랜치·병합

커밋 범위를 새 기준으로 이동

git rebase --onto main old-base topic
git cherry-pick <commit>브랜치·병합

특정 커밋만 현재 브랜치에 적용

git cherry-pick a1b2c3d
git branch -d <name>브랜치·병합

병합된 브랜치 삭제, -D는 강제 삭제

git branch -d feature/login
git restore <file>되돌리기

작업 트리 변경 폐기(커밋 전 자주 사용)

git restore src/app.vue
git reset --soft HEAD~1되돌리기

마지막 커밋 취소, 변경은 스테이지에 유지

git reset --soft HEAD~1
git reset HEAD~1되돌리기

커밋 취소 후 변경을 작업 트리로 되돌림

git reset HEAD~1
git reset --hard HEAD~1되돌리기

마지막 커밋과 변경을 완전히 폐기(복구 불가, 위험)

git reset --hard HEAD~1
git revert <commit>되돌리기

이력을 바꾸지 않고 반대 커밋을 생성

git revert a1b2c3d
git revert -m 1 <merge-commit>되돌리기

병합 커밋 취소, -m으로 유지할 부모 지정

git revert -m 1 8f3c2a1
git checkout <commit> -- <file>되돌리기

과거 커밋의 특정 파일만 복원

git checkout HEAD~2 -- config/nginx.conf
git reflog되돌리기

HEAD 이동 이력 확인, 유실된 커밋 복구 수단

git reflog
git clean -fd되돌리기

추적되지 않은 파일·디렉터리 삭제, 먼저 -n으로 확인

git clean -fdn
git stash스태시·정리

현재 변경을 임시 보관해 작업 트리를 깨끗하게

git stash push -m "wip: 登录页"
git stash list스태시·정리

모든 스태시 항목 조회

git stash list
git stash pop스태시·정리

최근 스태시를 복원하고 목록에서 제거

git stash pop
git stash apply stash@{2}스태시·정리

특정 스태시를 적용하고 목록은 유지

git stash apply stash@{2}
git stash drop스태시·정리

최근 스태시 삭제

git stash drop
git fetch --prune원격 협업

원격 업데이트를 가져오고 삭제된 원격 브랜치 정리

git fetch --all --prune
git pull --rebase원격 협업

리베이스 방식으로 가져와 불필요한 병합 커밋 방지

git pull --rebase
git push -u origin <branch>원격 협업

새 브랜치를 푸시하고 업스트림 설정

git push -u origin feature/login
git push --force-with-lease원격 협업

리베이스 후 강제 푸시, 원격에 새 커밋이 있으면 거부

git push --force-with-lease
git push origin --delete <branch>원격 협업

원격 브랜치 삭제

git push origin --delete feature/login
git remote -v원격 협업

원격 저장소 주소 확인

git remote -v
git remote set-url origin <url>원격 협업

원격 저장소 주소 변경, 프로토콜 전환 시 사용

git remote set-url origin git@github.com:user/repo.git
git push --tags원격 협업

모든 로컬 태그 푸시, 기본적으로는 함께 전송되지 않음

git push origin --tags
git log --oneline --graph이력 조회

한 줄 그래프 이력, 브랜치 구조 파악

git log --oneline --graph --decorate --all
git log -S "text"이력 조회

특정 문자열을 추가·삭제한 커밋 검색

git log -S "checkToken" --oneline
git log --author=ada --since=2.weeks이력 조회

작성자와 기간으로 커밋 필터링

git log --author=ada --since=2.weeks --oneline
git show <commit>이력 조회

특정 커밋의 상세와 변경 확인

git show a1b2c3d --stat
git diff이력 조회

작업 트리와 인덱스 차이

git diff --stat
git diff --staged이력 조회

스테이지 내용과 마지막 커밋 차이

git diff --staged
git blame <file>이력 조회

줄마다 마지막 작성자와 커밋 표시

git blame -L 20,40 src/app.vue
git shortlog -sn이력 조회

작성자별 커밋 수 통계

git shortlog -sn --no-merges
git bisect start이력 조회

버그를 만든 커밋을 이분 탐색으로 추적

git bisect start
# git bisect bad / git bisect good <commit>
git tag -a v1.0.0 -m "release"태그·릴리스

설명이 있는 주석 태그 생성

git tag -a v1.0.0 -m "first release"
git tag태그·릴리스

모든 태그 목록

git tag -l "v1.*"
git describe --tags태그·릴리스

가장 가까운 태그로 현재 버전 설명, 빌드 번호에 적합

git describe --tags --always
git push origin <tag>태그·릴리스

특정 태그를 원격으로 푸시

git push origin v1.0.0
git worktree add ../hotfix main복구·고급

한 저장소에서 여러 작업 디렉터리 사용, 병렬 개발

git worktree add ../repo-hotfix main
git submodule update --init --recursive복구·고급

서브모듈 초기화 및 가져오기

git submodule update --init --recursive
git archive --format=zip HEAD -o src.zip복구·고급

.git 없이 특정 커밋 스냅샷 내보내기

git archive --format=zip HEAD -o src.zip
git gc복구·고급

저장소 정리와 압축, 용량이 커졌을 때 실행

git gc --aggressive --prune=now
git fsck복구·고급

객체 무결성 검사, 저장소 손상 확인

git fsck --full
git range-diff복구·고급

리베이스 전후 차이 비교, 변경 유실 확인

git range-diff main old-topic topic
git format-patch <range>복구·고급

커밋을 패치 파일로 내보내기

git format-patch HEAD~3
git apply <patch>복구·고급

커밋 없이 패치 파일 적용

git apply --check fix.patch
git filter-repo --path <dir>복구·고급

경로를 제거하도록 이력 재작성, git-filter-repo 필요

git filter-repo --path secrets/ --invert-paths

뭔가 잘못됐거나 빠진 게 있나요?

피드백 보내기
작성자의 블로그
아이디어 보내기