ToolActToolAct

Git 명령어 참조

가장 완전한 Git 명령어 참조 매뉴얼, 카테고리별로 정리되어 빠르게 검색 가능

전체: 65 个命令

기본 명령어(13)

git init

현재 디렉토리에 새로운 Git 저장소 생성

git clone <url>

원격 저장소를 로컬로 클론

git clone --depth=1 <url>

최신 커밋만 가져오는 얕은 클론

git add <file>

파일을 스테이징 영역에 추가

git add .

모든 변경 사항을 스테이징 영역에 추가

git commit -m "message"

스테이징된 변경 사항 커밋

git commit --amend

마지막 커밋 수정

git status

저장소 현재 상태 보기

git diff

스테이징되지 않은 변경 사항 보기

git diff --staged

스테이징된 변경 사항 보기

git config --list

모든 설정 보기

git config --global user.name "name"

전체 사용자 이름 설정

git config --global user.email "email"

전체 이메일 설정

브랜치 관리(14)

git branch

모든 로컬 브랜치 나열

git branch -a

모든 브랜치 나열 (원격 포함)

git branch <name>

새 브랜치 생성

git branch -d <name>

브랜치 삭제

git branch -m <old> <new>

브랜치 이름 변경

git checkout <branch>

브랜치 전환

git checkout -b <branch>

새 브랜치를 생성하고 전환

git switch <branch>

브랜치 전환 (Git 2.23+)

git switch -c <branch>

새 브랜치를 생성하고 전환 (Git 2.23+)

git merge <branch>

지정된 브랜치를 현재 브랜치에 병합

git merge --no-ff <branch>

브랜치를 병합하고 병합 커밋 생성

git rebase <branch>

현재 브랜치를 지정된 브랜치에 리베이스

git rebase --continue

충돌 해결 후 리베이스 계속

git cherry-pick <commit>

특정 커밋을 선택하여 현재 브랜치에 병합

원격 작업(10)

git remote -v

원격 저장소 정보 보기

git remote add <name> <url>

원격 저장소 추가

git fetch <remote>

원격 저장소의 최신 내용 가져오기

git fetch --all

모든 원격 저장소 업데이트 가져오기

git pull <remote> <branch>

원격 브랜치를 가져와 병합

git pull --rebase

가져온 후 리베이스

git push <remote> <branch>

원격 저장소에 푸시

git push -f

강제 푸시 (주의하여 사용)

git push -u origin <branch>

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

git push origin --delete <branch>

원격 브랜치 삭제

되돌리기(8)

git reset <file>

파일 스테이징 해제

git reset --soft HEAD~1

최근 커밋 되돌리기, 변경 사항 유지

git reset --mixed HEAD~1

커밋과 스테이징 되돌리기, 작업 영역 유지

git reset --hard HEAD~1

커밋 되돌리고 모든 변경 사항 삭제

git revert <commit>

지정된 커밋 되돌리기 (새 커밋 생성)

git restore <file>

작업 영역 파일 복원 (Git 2.23+)

git restore --staged <file>

파일 스테이징 해제 (Git 2.23+)

git clean -fd

추적되지 않는 파일과 디렉토리 삭제

태그 관리(6)

git tag

모든 태그 나열

git tag <name>

가벼운 태그 생성

git tag -a <name> -m "msg"

주석 태그 생성

git tag -d <name>

로컬 태그 삭제

git push origin <tag>

태그를 원격에 푸시

git push --tags

모든 태그를 원격에 푸시

기록 보기(7)

git log

커밋 기록 보기

git log --oneline

커밋 기록을 간결하게 표시

git log --oneline --graph --all

모든 브랜치 기록을 그래프로 표시

git show <commit>

커밋 상세 정보 보기

git blame <file>

파일 각 줄의 수정 기록 보기

git reflog

모든 작업 기록 보기

git bisect start

이진 검색으로 문제 커밋 찾기 시작

보관(7)

git stash

현재 변경 사항 보관

git stash save "message"

메시지와 함께 변경 사항 보관

git stash list

모든 보관 보기

git stash pop

가장 최근 보관을 적용하고 삭제

git stash apply

가장 최근 보관을 적용하지만 삭제하지 않음

git stash drop

가장 최근 보관 삭제

git stash clear

모든 보관 삭제

Git이란?

Git 치트 시트는 하려는 작업별로 자주 쓰는 버전 관리 명령을 정리한 빠른 참고 자료입니다. Git은 분산 버전 관리 시스템으로, 각 clone이 프로젝트 기록을 가지고 있고, 브랜치는 가벼운 포인터이며, commit은 코드베이스가 시간에 따라 어떻게 바뀌었는지 기록합니다. 이 치트 시트는 무엇을 하려는지는 알지만 정확한 명령 문법이 기억나지 않을 때 유용합니다. 예를 들어 staged 변경 확인, 브랜치 생성, commit 되돌리기, 작업 stash, 릴리스 태그, 원격 저장소 동기화 등이 있습니다. 하지만 이것은 참고 자료일 뿐 저장소 상태 이해를 대신하지 않습니다. reset --hard, clean -fd, rebase, force push 같은 위험한 명령은 미커밋 변경, 현재 브랜치, 원격 협업 영향을 확인한 뒤 사용해야 합니다.

사용 가이드

빠른 참조

  1. 명령어 카드를 클릭하면 해당 명령어가 복사됩니다
  2. 검색창을 사용하여 특정 명령어를 빠르게 찾으세요
  3. 카테고리 태그를 클릭하여 유형별로 필터링합니다
  4. 명령어에 마우스를 올리면 상세 설명을 볼 수 있습니다

기능

시나리오별 분류기본, 브랜치, 원격, 실행 취소, 태그, 히스토리, 스태시로 그룹화되어 전체 목록을 스크롤하지 않고도 쉽게 찾을 수 있습니다.
검색 및 필터검색창과 카테고리 버튼을 조합해 빠르게 결과를 좁힐 수 있어, 명령어나 설명의 일부만 기억날 때 특히 유용합니다.
클릭 복사명령어 카드를 클릭하여 복사한 뒤 필요에 따라 브랜치 이름, 파일 경로 또는 커밋 해시를 교체하세요.
위험 경고실행 취소, 리셋, 강제 푸시 명령어는 영향 범위를 확인해야 하며, 실수로 로컬 변경사항이 삭제되거나 공유 히스토리가 덮어써지는 것을 방지하기 위함입니다.

고급 팁

  • git restore --staged로 스테이징된 파일을 해제합니다
  • git commit --amend로 마지막 커밋을 수정합니다
  • git stash로 작업 진행 상황을 임시 저장합니다
  • git revert로 이미 푸시된 커밋을 실행 취소합니다

활용 사례

작업 중 필요한 명령어 카테고리 찾기기본 작업, 브랜치, 원격, 실행 취소, 태그, 히스토리, 스태시별로 Git 명령어를 검색하거나 필터링하면 긴 글을 훑거나 튜토리얼 탭을 다시 열지 않고 올바른 문법을 바로 볼 수 있습니다. 각 카드에는 명령어 옆에 간단한 설명이 표시되어 워크플로우는 기억나지만 정확한 플래그(--force-with-lease vs --force)나 git restore와 git reset의 차이가 필요할 때 유용합니다.
플레이스홀더를 유지한 채 명령어 복사git checkout -b <branch>, git push -u origin <branch>, git log --oneline --graph --all, git restore --staged <file> 같은 명령어를 원클릭으로 복사한 뒤 터미널에서 플레이스홀더를 교체하세요. 참조 자료가 브라우저에 머물러 커밋 데이터나 브랜치 이름이 아무 데도 전송되지 않으므로 실제 해시, 내부 브랜치 접두사, 아직 푸시되지 않은 피처 이름 옆에서 안전하게 복사할 수 있습니다.
위험한 명령어 사용 전 검토실행 취소 섹션에 reset, clean, restore, force-push 관련 워크플로우가 모여 있어 파괴적 의도를 한눈에 파악할 수 있습니다. git reset --hard HEAD~3 또는 git push --force를 실행하기 전에 git status로 현재 브랜치, git rev-parse --abbrev-ref --symbolic-full-name @{u}로 원격 추적 상태를 교차 확인하세요. 공유 히스토리를 다시 쓰면 팀원이 되돌릴 수 없습니다.
브랜치, 태그, 스태시 스니펫을 템플릿으로 저장git switch -c feature/x, git tag -a v1.2 -m, git stash push -m 같은 명령어는 팀의 브랜칭·릴리스 규칙에 따라 프로젝트마다 반복됩니다. 팀 온보딩 문서, 런북, pre-commit 훅 설정에 한 번 복사해 두면 Git 동작이 바뀔 때마다(예: 보호 브랜치에서 plain --force 대신 --force-with-lease가 필요할 때) 다시 확인할 수 있습니다.
히스토리 명령어로 저장소 읽기 (재작성 아님)git log --oneline --graph --all, git blame -L, git diff <branch>...를 실행하여 리베이스나 리버트를 열기 전에 누가 무엇을 바꿨는지 파악하세요. 먼저 읽는 것이 엉망진창 히스토리 복구보다 저렴합니다. 특히 모노레포에서는 피처 브랜치 간 리베이스 하나가 수십 개의 진행 중인 pull request를 무효화할 수 있습니다.

기술 원리

Git은 모든 프로젝트 상태를 .git/objects 내부의 콘텐츠 주소 지정 객체 그래프로 저장하며, 주소는 40자 SHA-1 해시입니다(SHA-256은 Git 2.29의 실험적 객체 형식부터 선택 가능). 네 가지 객체 유형이 있습니다: blob은 원시 파일 바이트를 저장하고, tree는 이름을 blob과 하위 트리에 매핑하며, commit은 트리와 부모 커밋, 작성자 메타데이터를 가리키고, tag는 위 모든 것에 서명된 포인터입니다. refs/heads/, refs/remotes/, refs/tags/ 아래의 브랜치와 태그는 SHA가 담긴 텍스트 파일일 뿐이며, HEAD는 현재 브랜치를 이름짓는 심볼릭 ref입니다.

로컬 변경은 세 영역을 거칩니다: 작업 디렉토리, 인덱스(스테이징 영역이라고도 하며 .git/index에 저장), 객체 데이터베이스. git add는 인덱스에 blob 해시를 기록하고, git commit은 인덱스를 새 트리와 커밋 객체로 동결하며, git checkout/switch는 인덱스와 작업 트리를 대상 커밋으로 업데이트합니다. 병합은 두 범주로 나뉩니다: fast-forward는 대상이 직접 하위일 때 단순히 브랜치 포인터를 전진시키고, three-way 병합(전략은 recursive 또는 ort)은 공통 조상을 계산하고 두 부모를 가진 병합 커밋을 생성합니다. git rebase는 커밋을 새 기준 위에 하나씩 리플레이하여 기록을 재작성하고 새 SHA를 생성합니다.

원격 동기화는 HTTPS 스마트 프로토콜, SSH, 또는 폐기된 git:// 프로토콜을 통해 실행되며, 델타 압축으로 생성된 팩 파일을 교환합니다. fetch 후 Git은 refs/remotes/origin/* 아래에 스냅샷을 저장하고, .git/logs/ 아래의 reflog는 기본 90일(gc.reflogExpire) 실행 취소 추적을 유지하므로 reset --hard나 잘못된 rebase 후에도 가비지 컬렉션이 도달 불가능한 객체를 가지치기하기 전까지 복구할 수 있습니다.
  • 객체 모델: blob, tree, commit, tag — SHA-1(또는 2.29부터 SHA-256)로 콘텐츠 주소 지정, .git/objects/xx/ 아래에 느슨하게 또는 .git/objects/pack/*.pack에 팩으로 저장
  • 인덱스/스테이징: .git/index는 경로 → blob 해시 + stat 정보를 매핑하는 바이너리 파일; git add가 업데이트하고, git commit이 트리로 동결
  • Refs와 HEAD: refs/heads/<branch>, refs/remotes/<remote>/<branch>, refs/tags/<tag>는 SHA가 담긴 일반 파일; HEAD는 현재 브랜치를 가리키는 심볼릭 ref
  • 병합 전략: 대상이 하위일 때 fast-forward, 그렇지 않으면 병합 기준을 사용하는 three-way recursive/ort 병합; --no-ff로 병합 커밋 강제
  • 리베이스 재작성: git rebase는 커밋을 새 기준 위에 리플레이하여 새 SHA를 생성하고, 푸시된 경우 공유 기록을 깨뜨림 — 따라서 --force 대신 --force-with-lease가 권장
  • reflog 복구: .git/logs/HEAD와 각 ref 로그가 90일간(reflogExpire) ref 이동을 보존; git reflog와 git reset으로 파괴적 작업 후 복원 가능
  • 전송: 스마트 HTTPS, SSH, 또는 git://가 upload-pack/receive-pack 프로토콜을 통해 팩 파일을 협상; 얕은 클론은 --depth로 기록 제한

예시

새 브랜치 생성 및 전환

git checkout -b feature/login  # 새 브랜치를 생성하고 전환

작업 디렉터리 변경 사항 되돌리기

git restore filename  # 파일을 마지막 커밋 상태로 복원

커밋 히스토리 보기

git log --oneline --graph --all  # 모든 브랜치 히스토리를 그래프로 표시

자주 묻는 질문

가장 최근 커밋을 어떻게 되돌리나요?

git reset --soft HEAD~1은 변경 사항을 스테이지에 남겨 다시 커밋할 수 있게 합니다. git reset --mixed HEAD~1은 작업 트리에는 남기지만 스테이지에서는 내립니다. git reset --hard HEAD~1은 변경 사항을 완전히 버립니다. 이미 푸시한 커밋이라면 git revert HEAD를 사용해 히스토리를 다시 쓰지 않고 변경을 취소하는 새 커밋을 만드세요.

git pull과 git fetch의 차이는 무엇인가요?

git fetch는 원격의 커밋을 로컬 ref로 내려받기만 하며 작업 브랜치에는 손대지 않습니다. git pull은 git fetch 후 git merge(또는 --rebase 설정 시 git rebase)를 함께 수행합니다. 업스트림 변경을 통합 전에 먼저 살펴보고 싶다면 fetch를 사용하세요.

파일의 로컬 변경 사항을 어떻게 폐기하나요?

git restore <file>은 작업 트리의 커밋되지 않은 수정을 버립니다. git restore --staged <file>은 내용을 보존한 채 스테이지에서만 내립니다. git checkout HEAD -- <file>은 최신 커밋의 버전으로 되돌립니다. 추적되지 않는 파일은 git clean -f로, 디렉터리까지 제거하려면 -fd로 삭제하세요.

rebase와 merge는 언제 각각 사용해야 하나요?

병합 전에 개인 기능 브랜치의 히스토리를 선형으로 정리하고 싶다면 rebase를, 실제 개발 히스토리를 보존하는 게 중요한 공유 브랜치를 통합할 때는 merge를 사용하세요. 공유 브랜치에 이미 푸시한 커밋은 모두의 합의 없이는 절대 rebase하지 마세요. SHA가 달라져 다른 사람의 클론이 깨집니다.

푸시될 내용을 미리 확인하려면 어떻게 하나요?

git log @{u}..는 업스트림에 없는 내 브랜치 커밋을 보여 주고, git diff @{u}는 그 차이를 묶어서 보여 줍니다. fetch 이후 git status는 origin과 비교해 ahead/behind 개수를 표시합니다.

삭제한 브랜치나 잃어버린 커밋을 복구할 수 있나요?

git reflog는 HEAD가 거쳐 간 모든 위치를 나열합니다. 잃어버린 커밋의 SHA를 찾아 git checkout <sha> 또는 git branch <name> <sha>를 실행하세요. reflog 항목은 가비지 컬렉션 전까지 기본 90일 정도 보존되니 실수 직후 빠르게 처리하는 것이 좋습니다.

커밋을 수정(amend)하는 가장 안전한 방법은 무엇인가요?

git commit --amend로 가장 최근 커밋의 메시지를 수정하거나 빠뜨린 파일을 추가할 수 있습니다. SHA가 새로 만들어지므로 푸시되지 않은 로컬 커밋에서만 사용하세요. 이미 푸시된 커밋을 꼭 수정해야 한다면 --force가 아닌 --force-with-lease로 푸시하여 동료의 업데이트를 덮어쓰지 않도록 하세요.