Git 명령어 치트시트
실무에서 자주 사용하는 Git 명령어 모음. 기본부터 고급까지 정리했다.
설정 (Configuration)
사용자 정보 설정
# 전역 사용자 이름 설정
git config --global user.name "홍길동"
# 전역 이메일 설정
git config --global user.email "hong@example.com"
# 현재 저장소에만 적용 (--global 제거)
git config user.name "홍길동"
# 설정 확인
git config --list
git config user.name
기본 설정
# 기본 브랜치명 설정 (main 권장)
git config --global init.defaultBranch main
# 기본 에디터 설정
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim
# 줄바꿈 설정 (Windows)
git config --global core.autocrlf true
# 줄바꿈 설정 (Mac/Linux)
git config --global core.autocrlf input
# 컬러 출력 활성화
git config --global color.ui auto
저장소 생성 (Repository)
git init - 새 저장소 초기화
현재 디렉토리에 새로운 Git 저장소를 생성한다.
# 현재 디렉토리에 저장소 생성
git init
# 특정 디렉토리에 저장소 생성
git init my-project
# bare 저장소 생성 (서버용, 작업 디렉토리 없음)
git init --bare my-project.git
git clone - 원격 저장소 복제
원격 저장소를 로컬로 복제한다.
# HTTPS로 복제
git clone https://github.com/user/repo.git
# SSH로 복제
git clone git@github.com:user/repo.git
# 특정 디렉토리명으로 복제
git clone https://github.com/user/repo.git my-folder
# 특정 브랜치만 복제
git clone -b develop https://github.com/user/repo.git
# 얕은 복제 (최신 커밋만, 히스토리 제외)
git clone --depth 1 https://github.com/user/repo.git
# 서브모듈 포함 복제
git clone --recurse-submodules https://github.com/user/repo.git
기본 작업 흐름 (Basic Workflow)
git status - 상태 확인
작업 디렉토리의 현재 상태를 확인한다.
# 전체 상태 확인
git status
# 간단한 형태로 확인
git status -s
git status --short
# 출력 예시:
# M modified-file.txt (스테이징됨)
# M unstaged-file.txt (수정됨, 스테이징 안됨)
# ?? new-file.txt (추적 안됨)
# A added-file.txt (새로 추가됨)
# D deleted-file.txt (삭제됨)
git add - 스테이징
변경사항을 스테이징 영역에 추가한다.
# 특정 파일 스테이징
git add filename.txt
# 여러 파일 스테이징
git add file1.txt file2.txt
# 현재 디렉토리의 모든 변경사항 스테이징
git add .
# 모든 변경사항 스테이징 (삭제 포함)
git add -A
git add --all
# 특정 패턴의 파일들 스테이징
git add *.js
git add src/
# 대화형 스테이징 (부분 선택)
git add -p
git add --patch
git commit - 커밋
스테이징된 변경사항을 저장소에 기록한다.
# 메시지와 함께 커밋
git commit -m "커밋 메시지"
# 스테이징 + 커밋 한번에 (추적 중인 파일만)
git commit -am "커밋 메시지"
# 에디터로 상세 메시지 작성
git commit
# 마지막 커밋 수정 (메시지 변경)
git commit --amend -m "수정된 메시지"
# 마지막 커밋에 파일 추가
git add forgotten-file.txt
git commit --amend --no-edit
# 빈 커밋 (CI 트리거용)
git commit --allow-empty -m "빈 커밋"
# 날짜 지정 커밋
git commit --date="2024-01-15 10:00:00" -m "메시지"
git diff - 변경사항 비교
파일 간의 차이를 확인한다.
# 작업 디렉토리 vs 스테이징 영역
git diff
# 스테이징 영역 vs 마지막 커밋
git diff --staged
git diff --cached
# 특정 파일의 변경사항
git diff filename.txt
# 두 커밋 비교
git diff commit1 commit2
# 두 브랜치 비교
git diff main develop
# 변경된 파일 목록만 표시
git diff --name-only
# 통계만 표시 (추가/삭제 줄 수)
git diff --stat
브랜치 (Branch)
git branch - 브랜치 관리
브랜치를 생성, 조회, 삭제한다.
# 브랜치 목록 확인
git branch
# 원격 브랜치 포함 전체 목록
git branch -a
# 원격 브랜치만 확인
git branch -r
# 새 브랜치 생성
git branch feature/login
# 브랜치 삭제 (병합된 브랜치)
git branch -d feature/login
# 브랜치 강제 삭제 (병합 여부 무관)
git branch -D feature/login
# 브랜치 이름 변경
git branch -m old-name new-name
# 현재 브랜치 이름 변경
git branch -m new-name
# 브랜치별 마지막 커밋 확인
git branch -v
# 병합된/병합 안된 브랜치 필터
git branch --merged
git branch --no-merged
git checkout / git switch - 브랜치 전환
다른 브랜치로 이동하거나 파일을 복원한다.
# 브랜치 전환 (전통적 방식)
git checkout develop
# 브랜치 전환 (권장, Git 2.23+)
git switch develop
# 브랜치 생성하면서 전환
git checkout -b feature/new
git switch -c feature/new
# 원격 브랜치 기반으로 로컬 브랜치 생성
git checkout -b feature/new origin/feature/new
git switch -c feature/new origin/feature/new
# 이전 브랜치로 전환
git checkout -
git switch -
# 특정 커밋으로 이동 (detached HEAD)
git checkout abc1234
# 파일 복원 (변경사항 취소)
git checkout -- filename.txt
git restore filename.txt # Git 2.23+
# 스테이징 취소
git restore --staged filename.txt
git merge - 브랜치 병합
다른 브랜치의 변경사항을 현재 브랜치에 통합한다.
# 브랜치 병합 (main에 feature 병합)
git checkout main
git merge feature/login
# Fast-forward 병합 비활성화 (병합 커밋 생성)
git merge --no-ff feature/login
# 병합 메시지 지정
git merge feature/login -m "feature/login 병합"
# 충돌 발생 시 병합 취소
git merge --abort
# Squash 병합 (커밋을 하나로 합침)
git merge --squash feature/login
git commit -m "feature/login 기능 추가"
git rebase - 브랜치 리베이스
커밋을 다른 베이스 위에 재배치한다.
# 현재 브랜치를 main 위에 리베이스
git rebase main
# 대화형 리베이스 (최근 3개 커밋 수정)
git rebase -i HEAD~3
# 리베이스 중 충돌 해결 후 계속
git rebase --continue
# 리베이스 취소
git rebase --abort
# 현재 단계 건너뛰기
git rebase --skip
대화형 리베이스 옵션:
| 명령어 | 설명 |
|---|---|
| pick | 커밋 사용 |
| reword | 커밋 메시지 수정 |
| edit | 커밋 수정 |
| squash | 이전 커밋과 합침 |
| fixup | 이전 커밋과 합침 (메시지 버림) |
| drop | 커밋 삭제 |
원격 저장소 (Remote)
git remote - 원격 저장소 관리
원격 저장소 연결을 관리한다.
# 원격 저장소 목록 확인
git remote
git remote -v # URL 포함
# 원격 저장소 추가
git remote add origin https://github.com/user/repo.git
# 원격 저장소 URL 변경
git remote set-url origin https://github.com/user/new-repo.git
# 원격 저장소 제거
git remote remove origin
# 원격 저장소 이름 변경
git remote rename origin upstream
# 원격 저장소 정보 확인
git remote show origin
git push - 원격에 업로드
로컬 변경사항을 원격 저장소에 업로드한다.
# 현재 브랜치 푸시
git push
# 특정 브랜치 푸시
git push origin main
# 브랜치 푸시 및 업스트림 설정
git push -u origin feature/login
git push --set-upstream origin feature/login
# 모든 브랜치 푸시
git push --all
# 태그 푸시
git push --tags
git push origin v1.0.0
# 강제 푸시 (주의: 히스토리 덮어씀)
git push --force
git push -f
# 안전한 강제 푸시 (원격이 변경되지 않은 경우만)
git push --force-with-lease
# 원격 브랜치 삭제
git push origin --delete feature/old
git push origin :feature/old
git pull - 원격에서 가져오기
원격 저장소의 변경사항을 가져와 병합한다.
# 현재 브랜치 풀
git pull
# 특정 원격/브랜치에서 풀
git pull origin main
# 리베이스로 풀 (병합 커밋 없이)
git pull --rebase
git pull -r
# 풀 충돌 시 취소
git pull --abort # rebase 모드일 때
git merge --abort # merge 모드일 때
git fetch - 원격 정보 가져오기
원격 저장소의 변경사항을 가져오되 병합하지 않는다.
# 모든 원격에서 가져오기
git fetch
# 특정 원격에서 가져오기
git fetch origin
# 삭제된 원격 브랜치 정리
git fetch --prune
git fetch -p
# 모든 원격의 모든 브랜치 가져오기
git fetch --all
히스토리 (History)
git log - 커밋 히스토리
커밋 기록을 조회한다.
# 기본 로그
git log
# 한 줄로 표시
git log --oneline
# 그래프로 표시
git log --graph
# 그래프 + 한 줄 + 모든 브랜치
git log --graph --oneline --all
# 최근 N개 커밋만
git log -5
# 특정 파일의 히스토리
git log -- filename.txt
git log -p filename.txt # 변경 내용 포함
# 특정 저자의 커밋
git log --author="홍길동"
# 날짜 범위
git log --since="2024-01-01" --until="2024-01-31"
git log --after="1 week ago"
# 커밋 메시지 검색
git log --grep="버그 수정"
# 변경 내용 검색
git log -S "function_name"
# 포맷 지정
git log --pretty=format:"%h %s (%an, %ar)"
자주 쓰는 포맷:
| 옵션 | 설명 |
|---|---|
| %H | 커밋 해시 (전체) |
| %h | 커밋 해시 (축약) |
| %s | 커밋 메시지 제목 |
| %an | 저자 이름 |
| %ar | 저자 날짜 (상대) |
| %ad | 저자 날짜 |
git show - 커밋 상세 정보
특정 커밋의 상세 정보를 확인한다.
# 마지막 커밋 상세 정보
git show
# 특정 커밋 상세 정보
git show abc1234
# 특정 커밋의 특정 파일
git show abc1234:path/to/file.txt
# 변경된 파일 목록만
git show --name-only abc1234
git blame - 라인별 작성자
각 라인을 누가 언제 수정했는지 확인한다.
# 파일의 각 라인별 작성자 확인
git blame filename.txt
# 특정 라인 범위만
git blame -L 10,20 filename.txt
# 공백 변경 무시
git blame -w filename.txt
# 이동/복사된 라인 추적
git blame -M filename.txt
되돌리기 (Undo)
git reset - 커밋 되돌리기
HEAD를 이전 상태로 되돌린다.
# 스테이징 취소 (파일 유지)
git reset HEAD filename.txt
git reset filename.txt
# 마지막 커밋 취소 (변경사항은 스테이징 영역에)
git reset --soft HEAD~1
# 마지막 커밋 취소 (변경사항은 작업 디렉토리에)
git reset HEAD~1
git reset --mixed HEAD~1
# 마지막 커밋 완전 삭제 (변경사항도 삭제, 주의!)
git reset --hard HEAD~1
# 특정 커밋으로 되돌리기
git reset --hard abc1234
# 원격 브랜치 상태로 되돌리기
git reset --hard origin/main
| 옵션 | 스테이징 | 작업 디렉토리 |
|---|---|---|
| –soft | 유지 | 유지 |
| –mixed (기본) | 취소 | 유지 |
| –hard | 취소 | 삭제 |
git revert - 커밋 되돌리기 (안전)
기존 커밋을 취소하는 새 커밋을 생성한다.
# 특정 커밋 되돌리기
git revert abc1234
# 커밋 없이 되돌리기 (변경사항만 적용)
git revert --no-commit abc1234
# 여러 커밋 되돌리기
git revert abc1234..def5678
# 병합 커밋 되돌리기
git revert -m 1 merge-commit-hash
git stash - 임시 저장
작업 중인 변경사항을 임시로 저장한다.
# 변경사항 임시 저장
git stash
git stash push -m "작업 중인 로그인 기능"
# 추적되지 않는 파일도 포함
git stash -u
git stash --include-untracked
# stash 목록 확인
git stash list
# 최근 stash 적용 (stash 유지)
git stash apply
# 특정 stash 적용
git stash apply stash@{2}
# 최근 stash 적용 후 삭제
git stash pop
# 특정 stash 삭제
git stash drop stash@{0}
# 모든 stash 삭제
git stash clear
# stash 내용 확인
git stash show stash@{0}
git stash show -p stash@{0} # diff 포함
git clean - 추적되지 않는 파일 삭제
추적되지 않는 파일을 삭제한다.
# 삭제될 파일 미리보기
git clean -n
git clean --dry-run
# 추적되지 않는 파일 삭제
git clean -f
# 디렉토리도 삭제
git clean -fd
# .gitignore 파일도 삭제
git clean -fx
# 대화형 모드
git clean -i
태그 (Tag)
버전 릴리스에 태그를 붙인다.
# 태그 목록 확인
git tag
git tag -l "v1.*" # 패턴 검색
# 경량 태그 생성
git tag v1.0.0
# 주석 태그 생성 (권장)
git tag -a v1.0.0 -m "버전 1.0.0 릴리스"
# 특정 커밋에 태그
git tag -a v1.0.0 abc1234 -m "메시지"
# 태그 정보 확인
git show v1.0.0
# 태그 삭제
git tag -d v1.0.0
# 원격에서 태그 삭제
git push origin --delete v1.0.0
# 태그 푸시
git push origin v1.0.0
git push --tags # 모든 태그
Cherry-pick
특정 커밋만 선택해서 현재 브랜치에 적용한다.
# 특정 커밋 가져오기
git cherry-pick abc1234
# 여러 커밋 가져오기
git cherry-pick abc1234 def5678
# 커밋 범위 가져오기
git cherry-pick abc1234..def5678
# 커밋 없이 변경사항만 적용
git cherry-pick --no-commit abc1234
# 충돌 해결 후 계속
git cherry-pick --continue
# cherry-pick 취소
git cherry-pick --abort
검색 (Search)
git grep - 코드 검색
저장소 내 코드를 검색한다.
# 문자열 검색
git grep "TODO"
# 대소문자 무시
git grep -i "todo"
# 라인 번호 표시
git grep -n "function"
# 파일명만 표시
git grep -l "class"
# 특정 파일 타입에서 검색
git grep "import" -- "*.java"
# 특정 커밋/브랜치에서 검색
git grep "bug" HEAD~5
git grep "bug" main
유용한 팁
별칭 (Alias) 설정
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lg "log --graph --oneline --all"
# 사용
git co main
git st
git lg
.gitignore 파일
# 컴파일된 파일
*.class
*.jar
*.war
# IDE 설정
.idea/
.vscode/
*.iml
# 빌드 디렉토리
/build/
/target/
/dist/
/node_modules/
# 로그 파일
*.log
# 환경 설정 파일
.env
.env.local
application-local.yml
# OS 파일
.DS_Store
Thumbs.db
reflog - 모든 작업 기록
실수로 삭제한 커밋 복구에 유용하다.
# reflog 확인
git reflog
# 특정 시점으로 복구
git reset --hard HEAD@{2}
명령어 요약
| 명령어 | 설명 |
|---|---|
git init |
새 저장소 초기화 |
git clone |
원격 저장소 복제 |
git status |
작업 디렉토리 상태 확인 |
git add |
스테이징 영역에 추가 |
git commit |
변경사항 커밋 |
git push |
원격에 업로드 |
git pull |
원격에서 가져와 병합 |
git fetch |
원격 정보만 가져오기 |
git branch |
브랜치 관리 |
git checkout / switch |
브랜치 전환 |
git merge |
브랜치 병합 |
git rebase |
브랜치 리베이스 |
git diff |
변경사항 비교 |
git log |
커밋 히스토리 조회 |
git reset |
커밋 되돌리기 |
git revert |
커밋 취소 (새 커밋 생성) |
git stash |
변경사항 임시 저장 |
git tag |
태그 관리 |
git cherry-pick |
특정 커밋 가져오기 |
Git은 분산 버전 관리 시스템이다. 명령어를 익히면 협업과 코드 관리가 훨씬 수월해진다.
댓글