A.1 설정 명령어
Git 설정
git config --global user.name "이름"전역 사용자 이름 설정 (커밋에 기록됨)
git config --global user.email "이메일"전역 이메일 설정 (GitHub 계정과 일치 권장)
git config --global init.defaultBranch main기본 브랜치명을 main으로 설정
git config --global core.autocrlf true줄바꿈 자동 변환 (Windows: true, Mac/Linux: input)
git config --global core.editor code --wait기본 에디터를 VS Code로 설정
git config --list현재 설정 전체 출력
git config user.name특정 설정값만 확인
git config --global --edit~/.gitconfig 파일을 에디터로 직접 편집
git config --local user.email "회사@corp.com"특정 저장소에만 다른 이메일 설정
A.2 기본 명령어
저장소 초기화 · 복제
git init현재 폴더를 Git 저장소로 초기화
git init 폴더명새 폴더를 만들고 초기화
git clone <URL>원격 저장소 전체를 로컬에 복제
git clone <URL> 폴더명지정 폴더명으로 복제
git clone -b 브랜치명 <URL>특정 브랜치만 복제
상태 · 스테이징 · 커밋
git status작업 디렉터리와 스테이징 상태 표시
git status -s간략한 상태 표시 (M=수정, A=추가, ?=untracked)
git add <파일>파일을 스테이징 영역에 추가
git add .현재 디렉터리 모든 변경 파일 스테이징
git add -p파일 내 일부 변경만 선택해 스테이징 (interactive)
git commit -m "메시지"스테이징 영역을 커밋
git commit -am "메시지"tracked 파일 전체를 add + commit (한 번에)
git commit --amend마지막 커밋 수정 (메시지 또는 내용)
git commit --amend --no-edit메시지 유지하고 내용만 수정
이력 조회
git log전체 커밋 이력 (q 키로 종료)
git log --oneline한 줄로 간략히
git log --oneline --graph --all모든 브랜치를 그래프로 시각화
git log -N최근 N개 커밋만 출력
git log --follow 파일명파일 이름 변경 이력 포함해 조회
git log --author="이름"특정 작성자의 커밋만 필터
git diff작업 디렉터리와 스테이징 비교
git diff --staged스테이징과 마지막 커밋 비교
git diff 브랜치A..브랜치B두 브랜치 간 차이 비교
git show 해시특정 커밋의 상세 내용 출력
원격 저장소
git remote add origin <URL>원격 저장소 등록
git remote -v원격 저장소 목록 + URL 확인
git remote set-url origin <URL>원격 URL 변경
git remote remove origin원격 저장소 연결 해제
git push -u origin main처음 push 및 upstream 설정
git pushupstream 설정 후 간단히 push
git push origin --delete 브랜치명원격 브랜치 삭제
git fetch origin원격 변경 사항 가져오기 (병합 안 함)
git pullfetch + merge (원격 변경 반영)
git pull --rebasepull 시 merge 대신 rebase 사용
브랜치 기본
git branch로컬 브랜치 목록
git branch -v브랜치별 최근 커밋 표시
git branch -a로컬 + 원격 브랜치 모두 표시
git branch 브랜치명브랜치 생성 (전환 안 함)
git switch 브랜치명브랜치 전환
git switch -c 브랜치명브랜치 생성 + 즉시 전환 (가장 많이 사용)
git switch -이전 브랜치로 돌아가기
git branch -m 새이름현재 브랜치명 변경
git branch -d 브랜치명브랜치 삭제 (병합된 경우만)
git branch -D 브랜치명브랜치 강제 삭제
git merge 브랜치명현재 브랜치에 대상 브랜치 병합
git merge --no-ff 브랜치명Fast-forward 방지 — 항상 merge commit 생성
git merge --abort병합 중단 (충돌 해결 포기)
복원 · 되돌리기
git restore 파일명작업 디렉터리 변경 취소 (마지막 커밋으로 복원)
git restore .모든 변경 취소
git restore --staged 파일명스테이징 취소 (파일은 그대로)
git reset --soft HEAD~1마지막 커밋 취소, 변경 사항 staged 유지
git reset HEAD~1마지막 커밋 취소, 변경 사항 unstaged
git reset --hard HEAD~1마지막 커밋 + 변경 사항 모두 삭제 ⚠️
git revert 해시특정 커밋을 되돌리는 새 커밋 생성 (안전)
git revert --no-edit 해시에디터 없이 revert
A.3 응용 명령어
Stash — 임시 저장
git stash현재 변경 사항 임시 저장
git stash push -m "설명"설명과 함께 stash (권장)
git stash -uUntracked 파일도 함께 stash
git stash liststash 목록 확인
git stash pop최근 stash 적용 + 목록에서 제거
git stash apply stash@{N}특정 stash 적용 (목록은 유지)
git stash drop stash@{N}특정 stash 삭제
git stash clear모든 stash 삭제
Cherry-pick · Rebase · Reflog
git cherry-pick 해시특정 커밋만 현재 브랜치에 적용
git cherry-pick --no-commit 해시커밋 없이 작업 디렉터리에만 적용
git cherry-pick --abortcherry-pick 중단
git rebase 브랜치명현재 브랜치를 대상 브랜치 위로 재적용
git rebase -i HEAD~N최근 N개 커밋 인터랙티브 편집
git rebase --continue충돌 해결 후 rebase 계속
git rebase --abortrebase 중단 및 원 상태 복구
git reflogHEAD 이동 전체 이력 (90일 보존)
git reset --hard HEAD@{N}reflog 특정 시점으로 복구
.gitignore — 추적 제외 파일
.gitignore 파일 생성저장소 루트에 위치. 패턴별로 Git 추적에서 제외
node_modules/.gitignore 예시: node_modules 폴더 전체 제외
*.log.gitignore 예시: 모든 .log 파일 제외
.env.gitignore 예시: 환경변수 파일 제외 (비밀키 보호)
git rm --cached 파일명이미 추적 중인 파일을 .gitignore 적용 (로컬 파일은 유지)
gitignore.io언어·프레임워크별 .gitignore 자동 생성 사이트
태그(Tag) — 버전 관리
git tag v1.0.0현재 커밋에 경량 태그 생성
git tag -a v1.0.0 -m "설명"주석 태그 생성 (릴리즈에 사용)
git tag태그 목록
git push origin v1.0.0태그를 원격에 push (기본 push에는 포함 안 됨)
git push origin --tags모든 태그 push
git tag -d v1.0.0로컬 태그 삭제
🎯 Git 마스터를 위한 다음 단계
- GitHub Actions: push 또는 PR 발생 시 자동으로 테스트·빌드·배포 파이프라인 실행
- Git Hooks: 커밋 전(pre-commit), push 전(pre-push) 자동 코드 검사·포맷팅 실행
- Monorepo 전략: 여러 서비스·패키지를 하나의 저장소에서 관리하는 방법
- Git Submodules: 외부 저장소를 내 저장소에 포함시키는 방법
- Signed Commits: GPG 키로 커밋 작성자를 암호학적으로 검증