Post

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.