Git 명령어 모음

Git 명령어를 카테고리별로 정리한 치트시트입니다.

82개 명령어

설정

명령어설명
git config --global user.name "이름"
전역 사용자 이름 설정
git config --global user.email "이메일"
전역 이메일 설정
git config --list
설정 목록 확인
git config --global core.editor "code --wait"
기본 에디터 변경

저장소 생성 & 복제

명령어설명
git init
새 Git 저장소 초기화
git clone <url>
원격 저장소 복제
git clone --depth 1 <url>
최신 커밋만 얕은 복제
git clone -b <branch> <url>
특정 브랜치만 복제

스테이징 & 커밋

명령어설명
git status
현재 상태 확인
git add <file>
특정 파일 스테이징
git add .
모든 변경사항 스테이징
git add -p
변경사항을 부분적으로 스테이징
git commit -m "메시지"
커밋 생성
git commit --amend
마지막 커밋 수정
git commit --amend --no-edit
메시지 변경 없이 마지막 커밋 수정

브랜치

명령어설명
git branch
로컬 브랜치 목록
git branch -a
모든 브랜치 목록 (원격 포함)
git branch <name>
새 브랜치 생성
git checkout <branch>
브랜치 전환
git checkout -b <branch>
브랜치 생성 후 전환
git switch <branch>
브랜치 전환 (Git 2.23+)
git switch -c <branch>
브랜치 생성 후 전환 (Git 2.23+)
git branch -d <branch>
브랜치 삭제 (머지된 경우)
git branch -D <branch>
브랜치 강제 삭제
git branch -m <old> <new>
브랜치 이름 변경

머지 & 리베이스

명령어설명
git merge <branch>
브랜치 머지
git merge --no-ff <branch>
머지 커밋 강제 생성
git merge --squash <branch>
모든 커밋을 하나로 합쳐 머지
git merge --abort
머지 중단
git rebase <branch>
현재 브랜치를 대상 브랜치 위에 리베이스
git rebase -i HEAD~3
최근 3개 커밋 인터랙티브 리베이스
git rebase --abort
리베이스 중단
git rebase --continue
충돌 해결 후 리베이스 계속
git cherry-pick <commit>
특정 커밋만 현재 브랜치에 적용

원격 저장소

명령어설명
git remote -v
원격 저장소 목록
git remote add origin <url>
원격 저장소 추가
git remote set-url origin <url>
원격 URL 변경
git push -u origin <branch>
브랜치 푸시 (업스트림 설정)
git push
현재 브랜치 푸시
git push origin --delete <branch>
원격 브랜치 삭제
git pull
원격 변경사항 가져오기 + 머지
git pull --rebase
원격 변경사항 가져오기 + 리베이스
git fetch
원격 변경사항 가져오기 (머지 안함)
git fetch --prune
삭제된 원격 브랜치 정리
git push --force-with-lease
안전한 강제 푸시

Stash

명령어설명
git stash
현재 변경사항 임시 저장
git stash -u
추적되지 않는 파일 포함 임시 저장
git stash save "메시지"
메시지와 함께 임시 저장
git stash list
스태시 목록
git stash pop
최근 스태시 적용 후 삭제
git stash apply
최근 스태시 적용 (삭제 안함)
git stash apply stash@{2}
특정 스태시 적용
git stash drop
최근 스태시 삭제
git stash clear
모든 스태시 삭제

조회 & 로그

명령어설명
git log --oneline
간략한 커밋 로그
git log --graph --oneline --all
모든 브랜치 그래프로 보기
git log -p <file>
파일의 변경 이력
git log --since="2024-01-01"
특정 날짜 이후 커밋
git log --author="이름"
특정 작성자의 커밋
git diff
스테이징되지 않은 변경사항
git diff --staged
스테이징된 변경사항
git diff <branch1>..<branch2>
두 브랜치 비교
git show <commit>
특정 커밋의 상세 정보
git blame <file>
파일의 각 줄 작성자 확인
git shortlog -sn
작성자별 커밋 수 통계
git reflog
HEAD 이동 이력 (복구용)

되돌리기

명령어설명
git checkout -- <file>
파일의 변경사항 되돌리기
git restore <file>
파일 복원 (Git 2.23+)
git restore --staged <file>
스테이징 취소
git reset HEAD~1
마지막 커밋 취소 (변경사항 유지)
git reset --soft HEAD~1
커밋 취소 (스테이징 유지)
git reset --hard HEAD~1
마지막 커밋 취소 (변경사항 삭제)
git revert <commit>
특정 커밋을 되돌리는 새 커밋 생성
git clean -fd
추적되지 않는 파일/디렉토리 삭제
git clean -fdn
삭제될 파일 미리보기 (dry-run)

태그

명령어설명
git tag
태그 목록
git tag v1.0.0
경량 태그 생성
git tag -a v1.0.0 -m "메시지"
주석 태그 생성
git push origin v1.0.0
태그 푸시
git push origin --tags
모든 태그 푸시
git tag -d v1.0.0
로컬 태그 삭제
git push origin :refs/tags/v1.0.0
원격 태그 삭제

자주 묻는 질문

Git rebase와 merge의 차이점은 무엇인가요?
merge는 두 브랜치의 변경사항을 합쳐 새로운 머지 커밋을 만듭니다. rebase는 현재 브랜치의 커밋들을 대상 브랜치 위에 재배치하여 깔끔한 선형 히스토리를 만듭니다. 공유 브랜치에서는 merge, 개인 브랜치에서는 rebase를 사용하는 것이 일반적입니다.
git stash는 언제 사용하나요?
현재 작업 중인 변경사항을 임시로 저장하고 다른 작업을 할 때 사용합니다. 브랜치 전환 전에 커밋하지 않고 변경사항을 보관할 수 있습니다. git stash pop으로 다시 복원합니다.
git reset과 git revert의 차이점은 무엇인가요?
reset은 커밋을 완전히 되돌려 히스토리에서 제거합니다. revert는 이전 커밋의 변경을 되돌리는 새 커밋을 생성하므로 히스토리가 보존됩니다. 이미 푸시한 커밋은 revert를 사용하는 것이 안전합니다.
git cherry-pick은 어떤 상황에서 사용하나요?
cherry-pick은 다른 브랜치의 특정 커밋만 현재 브랜치에 적용할 때 사용합니다. 핫픽스를 여러 브랜치에 적용하거나, 특정 기능만 선택적으로 가져올 때 유용합니다.
git reset의 --soft, --mixed, --hard 차이는 무엇인가요?
--soft는 커밋만 취소하고 변경사항을 스테이징 상태로 유지합니다. --mixed(기본값)는 커밋과 스테이징을 취소하지만 파일 변경은 유지합니다. --hard는 모든 변경사항을 완전히 삭제합니다.
git fetch와 git pull의 차이는 무엇인가요?
git fetch는 원격 저장소의 변경사항을 로컬에 다운로드만 하고 현재 브랜치에 반영하지 않습니다. git pull은 fetch + merge로, 변경사항을 다운로드하고 자동으로 현재 브랜치에 머지합니다.
git switch와 git checkout의 차이는 무엇인가요?
Git 2.23부터 checkout의 기능을 switch(브랜치 전환)와 restore(파일 복원)로 분리했습니다. switch가 더 명확하고 안전한 브랜치 전환 명령어입니다.

다른 도구