Git Command Cheat Sheet
Git을 사용하며 알게된 CLI 명령어들을 공유합니다.
기본 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Git 초기 설정
git config --global user.name "Your Name" # 사용자 이름 설정
git config --global user.email "your.email@example.com" # 이메일 설정
git config --global init.defaultBranch main # 기본 브랜치를 main으로 설정
git config --global core.editor "code --wait" # 기본 에디터 설정 (VS Code)
git config --global core.autocrlf true # Windows에서 CRLF 자동 변환
git config --global core.autocrlf input # macOS/Linux에서 LF 사용
# 설정 확인
git config --list # 모든 설정 확인
git config --global --list # 글로벌 설정만 확인
git config user.name # 특정 설정 값 확인
git config --show-origin user.name # 설정 파일 위치와 함께 확인
# SSH 키 설정 (GitHub/GitLab)
ssh-keygen -t ed25519 -C "your.email@example.com" # SSH 키 생성
eval "$(ssh-agent -s)" # SSH 에이전트 시작
ssh-add ~/.ssh/id_ed25519 # SSH 키 추가
저장소 초기화 및 복제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 저장소 생성 및 복제
git init # 현재 디렉토리를 Git 저장소로 초기화
git init my-project # 새 디렉토리에 Git 저장소 생성
git clone https://github.com/user/repo.git # 원격 저장소 복제
git clone https://github.com/user/repo.git my-folder # 특정 폴더명으로 복제
git clone --depth 1 https://github.com/user/repo.git # 최신 커밋만 복제 (shallow clone)
git clone -b develop https://github.com/user/repo.git # 특정 브랜치 복제
# 원격 저장소 관리
git remote -v # 원격 저장소 목록 확인
git remote add origin https://github.com/user/repo.git # 원격 저장소 추가
git remote set-url origin https://github.com/user/new-repo.git # 원격 저장소 URL 변경
git remote remove origin # 원격 저장소 제거
git remote rename origin upstream # 원격 저장소 이름 변경
기본 작업 흐름
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 파일 상태 확인
git status # 작업 디렉토리 상태 확인
git status -s # 간단한 형태로 상태 확인
git status --porcelain # 스크립트에서 사용하기 좋은 형태
# 파일 추가 및 커밋
git add file.txt # 특정 파일 스테이징
git add . # 모든 변경사항 스테이징
git add -A # 모든 변경사항 스테이징 (삭제 포함)
git add -u # 수정된 파일만 스테이징
git add -p # 대화형으로 부분 스테이징
git commit -m "commit message" # 커밋 생성
git commit -am "commit message" # 스테이징과 커밋을 한번에
git commit --amend # 마지막 커밋 수정
git commit --amend -m "new message" # 마지막 커밋 메시지만 수정
git commit --amend --no-edit # 커밋 메시지 변경 없이 파일만 추가
# 변경사항 확인
git diff # 작업 디렉토리와 스테이징 영역 비교
git diff --staged # 스테이징 영역과 마지막 커밋 비교
git diff --cached # --staged와 동일
git diff HEAD # 작업 디렉토리와 마지막 커밋 비교
git diff HEAD~1 # 이전 커밋과 비교
git diff branch1..branch2 # 두 브랜치 비교
브랜치 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 브랜치 생성 및 전환
git branch # 로컬 브랜치 목록
git branch -a # 모든 브랜치 목록 (원격 포함)
git branch -r # 원격 브랜치 목록
git branch feature-branch # 새 브랜치 생성
git checkout feature-branch # 브랜치 전환
git checkout -b feature-branch # 브랜치 생성과 전환을 한번에
git switch feature-branch # 브랜치 전환 (Git 2.23+)
git switch -c feature-branch # 브랜치 생성과 전환 (Git 2.23+)
# 브랜치 삭제
git branch -d feature-branch # 브랜치 삭제 (병합된 경우만)
git branch -D feature-branch # 브랜치 강제 삭제
git push origin --delete feature-branch # 원격 브랜치 삭제
# 브랜치 정보
git branch -v # 브랜치와 마지막 커밋 정보
git branch --merged # 현재 브랜치에 병합된 브랜치들
git branch --no-merged # 병합되지 않은 브랜치들
git branch --contains <commit> # 특정 커밋을 포함하는 브랜치들
병합과 리베이스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 병합 (Merge)
git merge feature-branch # feature-branch를 현재 브랜치에 병합
git merge --no-ff feature-branch # Fast-forward 없이 병합
git merge --squash feature-branch # 커밋들을 하나로 합쳐서 병합
git merge --abort # 병합 중단
# 리베이스 (Rebase)
git rebase main # 현재 브랜치를 main 위로 리베이스
git rebase -i HEAD~3 # 최근 3개 커밋을 대화형으로 리베이스
git rebase --continue # 리베이스 계속 진행
git rebase --abort # 리베이스 중단
git rebase --skip # 현재 커밋 건너뛰기
# 충돌 해결
git status # 충돌 파일 확인
git add <resolved-file> # 충돌 해결 후 파일 추가
git commit # 병합 커밋 생성
git mergetool # 병합 도구 실행
원격 저장소 작업
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 가져오기와 푸시
git fetch # 원격 저장소에서 변경사항 가져오기
git fetch origin # 특정 원격 저장소에서 가져오기
git pull # fetch + merge
git pull --rebase # fetch + rebase
git pull origin main # 특정 브랜치에서 pull
git push # 현재 브랜치를 원격으로 푸시
git push origin main # 특정 브랜치 푸시
git push -u origin feature-branch # 새 브랜치 푸시 및 업스트림 설정
git push --force # 강제 푸시 (위험!)
git push --force-with-lease # 안전한 강제 푸시
# 업스트림 설정
git branch --set-upstream-to=origin/main main # 업스트림 브랜치 설정
git push -u origin main # 푸시와 동시에 업스트림 설정
히스토리 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 로그 확인
git log # 커밋 히스토리 확인
git log --oneline # 한 줄로 간단히 표시
git log --graph # 그래프 형태로 표시
git log --graph --oneline --all # 모든 브랜치의 그래프
git log -p # 각 커밋의 변경사항 표시
git log --stat # 파일별 변경 통계
git log -n 5 # 최근 5개 커밋만 표시
# 특정 조건으로 로그 필터링
git log --author="John Doe" # 특정 작성자의 커밋
git log --since="2023-01-01" # 특정 날짜 이후 커밋
git log --until="2023-12-31" # 특정 날짜 이전 커밋
git log --grep="fix" # 커밋 메시지에 "fix" 포함
git log --all --grep="bug" --author="John" # 복합 조건
# 파일별 히스토리
git log -- file.txt # 특정 파일의 히스토리
git log -p -- file.txt # 특정 파일의 변경사항 히스토리
git blame file.txt # 파일의 각 줄 작성자 확인
git show HEAD:file.txt # 특정 커밋의 파일 내용 확인
변경사항 되돌리기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 작업 디렉토리 변경사항 되돌리기
git checkout -- file.txt # 특정 파일의 변경사항 되돌리기
git checkout . # 모든 변경사항 되돌리기
git restore file.txt # 파일 복원 (Git 2.23+)
git restore . # 모든 파일 복원
# 스테이징 취소
git reset HEAD file.txt # 특정 파일 스테이징 취소
git reset HEAD # 모든 스테이징 취소
git restore --staged file.txt # 스테이징 취소 (Git 2.23+)
# 커밋 되돌리기
git reset --soft HEAD~1 # 마지막 커밋 취소 (변경사항 유지)
git reset --mixed HEAD~1 # 마지막 커밋과 스테이징 취소
git reset --hard HEAD~1 # 마지막 커밋과 모든 변경사항 삭제
git revert HEAD # 마지막 커밋을 되돌리는 새 커밋 생성
git revert <commit-hash> # 특정 커밋을 되돌리는 새 커밋 생성
스태시 (Stash)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 임시 저장
git stash # 현재 변경사항 임시 저장
git stash save "work in progress" # 메시지와 함께 임시 저장
git stash -u # 추적되지 않는 파일도 포함
git stash -a # 모든 파일 포함 (무시된 파일도)
# 스태시 관리
git stash list # 스태시 목록 확인
git stash show # 최근 스태시 내용 확인
git stash show -p # 최근 스태시 변경사항 상세 확인
git stash show stash@{1} # 특정 스태시 확인
# 스태시 적용 및 삭제
git stash apply # 최근 스태시 적용
git stash apply stash@{1} # 특정 스태시 적용
git stash pop # 최근 스태시 적용 후 삭제
git stash drop # 최근 스태시 삭제
git stash drop stash@{1} # 특정 스태시 삭제
git stash clear # 모든 스태시 삭제
태그 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 태그 생성
git tag v1.0.0 # 라이트웨이트 태그 생성
git tag -a v1.0.0 -m "Version 1.0.0" # 어노테이트된 태그 생성
git tag -a v1.0.0 <commit-hash> -m "Version 1.0.0" # 특정 커밋에 태그 생성
# 태그 조회
git tag # 모든 태그 목록
git tag -l "v1.*" # 패턴으로 태그 검색
git show v1.0.0 # 태그 정보 확인
# 태그 푸시 및 삭제
git push origin v1.0.0 # 특정 태그 푸시
git push origin --tags # 모든 태그 푸시
git tag -d v1.0.0 # 로컬 태그 삭제
git push origin --delete v1.0.0 # 원격 태그 삭제
고급 기능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Cherry-pick
git cherry-pick <commit-hash> # 특정 커밋을 현재 브랜치에 적용
git cherry-pick <commit1>..<commit2> # 커밋 범위 적용
git cherry-pick --no-commit <commit-hash> # 커밋하지 않고 변경사항만 적용
# Bisect (이진 탐색으로 버그 찾기)
git bisect start # 이진 탐색 시작
git bisect bad # 현재 커밋이 나쁨
git bisect good <commit-hash> # 특정 커밋이 좋음
git bisect reset # 이진 탐색 종료
# Submodule
git submodule add https://github.com/user/repo.git path/to/submodule # 서브모듈 추가
git submodule init # 서브모듈 초기화
git submodule update # 서브모듈 업데이트
git submodule update --init --recursive # 모든 서브모듈 초기화 및 업데이트
# Worktree (여러 작업 디렉토리)
git worktree add ../feature-branch feature-branch # 새 작업 디렉토리 생성
git worktree list # 작업 디렉토리 목록
git worktree remove ../feature-branch # 작업 디렉토리 제거
파일 및 디렉토리 관리
1
2
3
4
5
6
7
8
9
10
11
12
# 파일 추적 관리
git rm file.txt # 파일 삭제 및 스테이징
git rm --cached file.txt # 추적 중단 (파일은 유지)
git mv old-name.txt new-name.txt # 파일 이름 변경
# .gitignore
echo "*.log" >> .gitignore # 로그 파일 무시
echo "node_modules/" >> .gitignore # 디렉토리 무시
git check-ignore -v file.txt # 파일이 무시되는 이유 확인
git clean -n # 삭제될 파일 미리보기
git clean -f # 추적되지 않는 파일 삭제
git clean -fd # 추적되지 않는 파일과 디렉토리 삭제
유용한 별칭 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 자주 사용하는 별칭 설정
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual '!gitk'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 사용 예시
git st # git status
git co main # git checkout main
git lg # 예쁜 로그 출력
문제 해결 및 디버깅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 상태 확인
git status # 현재 상태 확인
git log --oneline -10 # 최근 10개 커밋 확인
git reflog # 모든 참조 로그 확인
git fsck # 저장소 무결성 검사
# 설정 문제 해결
git config --list --show-origin # 설정과 파일 위치 확인
git config --global --unset user.name # 설정 제거
git config --global --edit # 설정 파일 직접 편집
# 원격 저장소 문제
git remote -v # 원격 저장소 확인
git ls-remote origin # 원격 브랜치 확인
git fetch --prune # 삭제된 원격 브랜치 정리
# 병합 충돌 해결
git status # 충돌 파일 확인
git diff # 충돌 내용 확인
git add <resolved-file> # 해결된 파일 추가
git commit # 병합 완료
# 커밋 히스토리 정리
git rebase -i HEAD~3 # 최근 3개 커밋 대화형 리베이스
git commit --fixup <commit-hash> # 특정 커밋 수정용 커밋 생성
git rebase -i --autosquash HEAD~5 # fixup 커밋 자동 정리
Git 플로우 및 협업
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Git Flow 기본 패턴
git checkout main # main 브랜치로 이동
git pull origin main # 최신 상태로 업데이트
git checkout -b feature/new-feature # 새 기능 브랜치 생성
# ... 작업 수행 ...
git add . # 변경사항 스테이징
git commit -m "Add new feature" # 커밋
git push -u origin feature/new-feature # 브랜치 푸시
# ... Pull Request/Merge Request 생성 ...
git checkout main # main으로 돌아가기
git pull origin main # 병합된 변경사항 가져오기
git branch -d feature/new-feature # 로컬 브랜치 삭제
# 포크 저장소 작업
git remote add upstream https://github.com/original/repo.git # 원본 저장소 추가
git fetch upstream # 원본 저장소에서 가져오기
git checkout main # main 브랜치로 이동
git merge upstream/main # 원본의 변경사항 병합
git push origin main # 포크에 푸시
궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요.
Written with KKam._.Ji
This post is licensed under CC BY 4.0 by the author.