🔧
DevOps
Git
Git Version Control
분산 버전 관리 시스템. 브랜치, 머지, 커밋으로 소스 코드 변경 이력을 추적. GitHub, GitLab과 함께 사용.
Git Version Control
분산 버전 관리 시스템. 브랜치, 머지, 커밋으로 소스 코드 변경 이력을 추적. GitHub, GitLab과 함께 사용.
Git은 2005년 리누스 토르발스가 Linux 커널 개발을 위해 만든 분산 버전 관리 시스템(DVCS)입니다. 파일의 변경 이력을 추적하고, 여러 개발자가 동시에 작업할 수 있게 해주며, 현재 전 세계적으로 가장 널리 사용되는 소스 코드 관리 도구입니다.
# 저장소 초기화 또는 복제
git init my-project
git clone https://github.com/user/repo.git
# 상태 확인
git status
git log --oneline --graph
# 파일 스테이징 및 커밋
git add . # 모든 변경사항 스테이징
git add src/app.js # 특정 파일만 스테이징
git commit -m "feat: 로그인 기능 추가"
# 원격 저장소 연동
git remote add origin https://github.com/user/repo.git
git push -u origin main
git pull origin main
# 변경사항 확인
git diff # Working vs Staging
git diff --staged # Staging vs Last Commit
git diff main..feature-branch # 브랜치 간 비교
# 브랜치 생성 및 전환
git branch feature/login # 브랜치 생성
git checkout feature/login # 브랜치 전환
git checkout -b feature/login # 생성과 전환을 동시에
git switch -c feature/login # Git 2.23+ 새로운 명령어
# 브랜치 목록
git branch # 로컬 브랜치
git branch -r # 원격 브랜치
git branch -a # 모든 브랜치
# 브랜치 병합
git checkout main
git merge feature/login # feature/login을 main에 병합
git merge --no-ff feature/login # fast-forward 방지
# 브랜치 삭제
git branch -d feature/login # 병합된 브랜치 삭제
git branch -D feature/login # 강제 삭제
git push origin --delete feature/login # 원격 브랜치 삭제
# 스테이징 취소
git restore --staged file.js # Git 2.23+
git reset HEAD file.js # 이전 방식
# 작업 변경사항 버리기
git restore file.js # Git 2.23+
git checkout -- file.js # 이전 방식
# 마지막 커밋 수정
git commit --amend -m "새 메시지" # 메시지 수정
git commit --amend --no-edit # 파일만 추가
# 커밋 되돌리기
git revert HEAD # 새 커밋으로 되돌림 (안전)
git reset --soft HEAD~1 # 커밋 취소, 스테이징 유지
git reset --mixed HEAD~1 # 커밋 취소, 스테이징도 취소
git reset --hard HEAD~1 # 모든 변경사항 삭제 (주의!)
# Rebase - 커밋 히스토리 정리
git checkout feature
git rebase main # feature를 main 위로 이동
# Interactive Rebase - 커밋 편집
git rebase -i HEAD~3 # 최근 3개 커밋 편집
# pick, squash, reword, edit, drop 옵션 사용
# Cherry-pick - 특정 커밋만 가져오기
git cherry-pick abc1234
# Stash - 임시 저장
git stash # 변경사항 임시 저장
git stash pop # 복원
git stash list # 목록
git stash drop # 삭제
# 특정 파일 히스토리
git log --follow -p -- src/app.js
# 누가 수정했는지 확인
git blame src/app.js
# .gitignore
# Node.js
node_modules/
npm-debug.log
.env
.env.local
# Build
dist/
build/
*.min.js
# IDE
.idea/
.vscode/
*.swp
# OS
.DS_Store
Thumbs.db
# 예외
!.gitkeep
!important-file.env.example
공유된 브랜치(main, develop)에 `git push --force`를 사용하면 다른 팀원의 작업이 유실될 수 있습니다. `--force-with-lease` 옵션이 더 안전합니다.
비밀번호, API 키 등을 커밋하면 히스토리에 영구 기록됩니다. 삭제해도 복구 가능하므로, 노출 시 즉시 키를 교체하세요.
Git은 대용량 바이너리 파일에 적합하지 않습니다. 영상, 빌드 결과물은 Git LFS(Large File Storage)를 사용하세요.
일관된 커밋 메시지 형식(Conventional Commits)을 사용하면 자동화된 변경 로그 생성과 버전 관리가 쉬워집니다.