Git 명령어 참조
가장 완전한 Git 명령어 참조 매뉴얼, 카테고리별로 정리되어 빠르게 검색 가능
기본 명령어(13)
현재 디렉토리에 새로운 Git 저장소 생성
원격 저장소를 로컬로 클론
최신 커밋만 가져오는 얕은 클론
파일을 스테이징 영역에 추가
모든 변경 사항을 스테이징 영역에 추가
스테이징된 변경 사항 커밋
마지막 커밋 수정
저장소 현재 상태 보기
스테이징되지 않은 변경 사항 보기
스테이징된 변경 사항 보기
모든 설정 보기
전체 사용자 이름 설정
전체 이메일 설정
브랜치 관리(14)
모든 로컬 브랜치 나열
모든 브랜치 나열 (원격 포함)
새 브랜치 생성
브랜치 삭제
브랜치 이름 변경
브랜치 전환
새 브랜치를 생성하고 전환
브랜치 전환 (Git 2.23+)
새 브랜치를 생성하고 전환 (Git 2.23+)
지정된 브랜치를 현재 브랜치에 병합
브랜치를 병합하고 병합 커밋 생성
현재 브랜치를 지정된 브랜치에 리베이스
충돌 해결 후 리베이스 계속
특정 커밋을 선택하여 현재 브랜치에 병합
원격 작업(10)
원격 저장소 정보 보기
원격 저장소 추가
원격 저장소의 최신 내용 가져오기
모든 원격 저장소 업데이트 가져오기
원격 브랜치를 가져와 병합
가져온 후 리베이스
원격 저장소에 푸시
강제 푸시 (주의하여 사용)
푸시하고 업스트림 브랜치 설정
원격 브랜치 삭제
되돌리기(8)
파일 스테이징 해제
최근 커밋 되돌리기, 변경 사항 유지
커밋과 스테이징 되돌리기, 작업 영역 유지
커밋 되돌리고 모든 변경 사항 삭제
지정된 커밋 되돌리기 (새 커밋 생성)
작업 영역 파일 복원 (Git 2.23+)
파일 스테이징 해제 (Git 2.23+)
추적되지 않는 파일과 디렉토리 삭제
태그 관리(6)
모든 태그 나열
가벼운 태그 생성
주석 태그 생성
로컬 태그 삭제
태그를 원격에 푸시
모든 태그를 원격에 푸시
기록 보기(7)
커밋 기록 보기
커밋 기록을 간결하게 표시
모든 브랜치 기록을 그래프로 표시
커밋 상세 정보 보기
파일 각 줄의 수정 기록 보기
모든 작업 기록 보기
이진 검색으로 문제 커밋 찾기 시작
보관(7)
현재 변경 사항 보관
메시지와 함께 변경 사항 보관
모든 보관 보기
가장 최근 보관을 적용하고 삭제
가장 최근 보관을 적용하지만 삭제하지 않음
가장 최근 보관 삭제
모든 보관 삭제
Git이란?
Git 치트 시트는 하려는 작업별로 자주 쓰는 버전 관리 명령을 정리한 빠른 참고 자료입니다. Git은 분산 버전 관리 시스템으로, 각 clone이 프로젝트 기록을 가지고 있고, 브랜치는 가벼운 포인터이며, commit은 코드베이스가 시간에 따라 어떻게 바뀌었는지 기록합니다. 이 치트 시트는 무엇을 하려는지는 알지만 정확한 명령 문법이 기억나지 않을 때 유용합니다. 예를 들어 staged 변경 확인, 브랜치 생성, commit 되돌리기, 작업 stash, 릴리스 태그, 원격 저장소 동기화 등이 있습니다. 하지만 이것은 참고 자료일 뿐 저장소 상태 이해를 대신하지 않습니다. reset --hard, clean -fd, rebase, force push 같은 위험한 명령은 미커밋 변경, 현재 브랜치, 원격 협업 영향을 확인한 뒤 사용해야 합니다.
사용 가이드
빠른 참조
- 명령어 카드를 클릭하면 해당 명령어가 복사됩니다
- 검색창을 사용하여 특정 명령어를 빠르게 찾으세요
- 카테고리 태그를 클릭하여 유형별로 필터링합니다
- 명령어에 마우스를 올리면 상세 설명을 볼 수 있습니다
기능
고급 팁
- git restore --staged로 스테이징된 파일을 해제합니다
- git commit --amend로 마지막 커밋을 수정합니다
- git stash로 작업 진행 상황을 임시 저장합니다
- git revert로 이미 푸시된 커밋을 실행 취소합니다
활용 사례
기술 원리
로컬 변경은 세 영역을 거칩니다: 작업 디렉토리, 인덱스(스테이징 영역이라고도 하며 .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로 푸시하여 동료의 업데이트를 덮어쓰지 않도록 하세요.