6장: 실무 꿀팁과 고급 기능¶
1. git stash: 작업 중인 걸 임시 보관¶
"다른 브랜치로 급하게 이동해야 하는데, 지금 하던 건 아직 커밋하기 애매한데..."
# 현재 작업 내용 임시 저장
git stash
# 메시지와 함께 저장 (나중에 찾기 쉬움)
git stash push -m "검색 기능 작업 중"
# stash 목록 보기
git stash list
# stash@{0}: On feature/search: 검색 기능 작업 중
# stash@{1}: WIP on main: a1b2c3d update readme
# stash 가져오기 (가장 최근 것)
git stash pop
# 특정 stash 가져오기
git stash apply stash@{1}
# stash 삭제 (pop은 apply + drop)
git stash drop stash@{0}
# stash 전부 삭제
git stash clear
2. git stash 실전 시나리오¶
# feature 브랜치에서 작업 중...
git checkout -b feature/search
# ... 코드 수정 중 ...
# 급히 main의 버그를 고쳐야 함!
git stash push -m "search 기능 반쯤 함"
# main으로 이동해서 버그 수정
git checkout main
# ... 버그 수정 ...
git add . && git commit -m "fix: critical bug"
git push
# 다시 feature 브랜치로 돌아와서 작업 복구
git checkout feature/search
git stash pop
# 반쯤 하던 작업이 그대로 복구됨!
3. .gitconfig: 나만의 Git 설정¶
# 단축어(alias) 설정
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.lg "log --oneline --graph --all"
설정 후:
git st # = git status
git co main # = git checkout main
git lg # = git log --oneline --graph --all (최고!)
git unstage foo # = git reset HEAD -- foo
4. git log 활용법¶
# 커밋 히스토리를 예쁘게 보기
git log --oneline --graph --all --decorate
# 특정 파일의 변경 이력 보기
git log -p hello.py
# 누가 얼마나 커밋했는지
git shortlog -sn
# 최근 3개 커밋만 보기
git log -3 --oneline
# 특정 기간 커밋 보기
git log --since="2024-01-01" --until="2024-12-31"
# 검색: 커밋 메시지에서 찾기
git log --grep="login"
# 검색: 코드 변경 내용에서 찾기
git log -S "password"
5. git diff: 변경사항 자세히 보기¶
# 작업 디렉토리의 변경 보기 (add 전)
git diff
# 스테이징 영역의 변경 보기 (add 후, commit 전)
git diff --staged
# 특정 파일만 보기
git diff hello.py
# 두 커밋 간 차이 보기
git diff abc123 def456
# 두 브랜치 간 차이 보기
git diff main..feature/login
# 단어 단위로 차이 보기 (더 정밀함)
git diff --word-diff
6. git tag: 버전 표시하기¶
# 버전 태그 만들기
git tag v1.0.0
git tag v1.0.0 abc123 # 특정 커밋에 태그
# 주석이 있는 태그 (권장)
git tag -a v1.0.0 -m "첫 번째 릴리즈"
# 태그 목록 보기
git tag
# 태그 정보 보기
git show v1.0.0
# 태그 삭제
git tag -d v1.0.0
# 태그를 GitHub에 올리기
git push origin v1.0.0
git push origin --tags # 모든 태그 한 번에
시맨틱 버저닝 (Semantic Versioning)¶
v1.2.3
│ │ │
│ │ └── Patch: 버그 수정 (하위 호환)
│ └──── Minor: 기능 추가 (하위 호환)
└────── Major: 큰 변화 (하위 호환 깨짐)
예시:
- v1.0.0 → 첫 정식 릴리즈
- v1.1.0 → 새 기능 추가
- v1.1.1 → 버그 수정
- v2.0.0 → 대대적인 변경
7. git rebase: 커밋 히스토리 정리¶
주의: push한 커밋에는 절대 rebase 하지 마세요!
# 최근 3개 커밋을 합치거나 수정
git rebase -i HEAD~3
에디터가 열리면:
pick abc1234 첫 번째 커밋
pick def5678 두 번째 커밋
pick ghi9012 세 번째 커밋
# pick → squash로 바꾸면 이전 커밋에 합쳐짐
pick abc1234 첫 번째 커밋
squash def5678 두 번째 커밋
squash ghi9012 세 번째 커밋
# → 세 개가 하나로 합쳐짐
merge vs rebase¶
merge:
main: A → B → C → M (병합 커밋이 생김, 히스토리가 복잡)
↗ ↗
feature: D → E
rebase:
main: A → B → C → D' → E' (히스토리가 일직선, 깔끔)
# feature 브랜치를 main 위에 rebase
git checkout feature/login
git rebase main
8. GitHub Actions (간단 소개)¶
GitHub 저장소에서 자동으로 실행되는 스크립트입니다.
.github/
└── workflows/
└── test.yml # push할 때마다 테스트 자동 실행
간단한 예시:
name: Run Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm install
- run: npm test
활용 예시: - push할 때마다 자동으로 테스트 실행 - PR을 올리면 코드 스타일 검사 - main에 병합되면 자동으로 배포
9. 자주하는 실수와 해결법¶
| 실수 | 해결 |
|---|---|
| 커밋 메시지 오타 | git commit --amend -m "올바른 메시지" |
| add 잘못한 파일 | git restore --staged 파일명 |
| 잘못된 브랜치에서 작업 | git stash → 브랜치 이동 → git stash pop |
| push 안 했는데 reset --hard | git reflog로 찾아서 복구 |
| 큰 파일을 실수로 커밋 | .gitignore 추가 → git rm --cached 큰파일 |
10. 추천 도구¶
| 도구 | 용도 | 난이도 |
|---|---|---|
| GitHub Desktop | GUI Git 클라이언트 | 초보 |
| VS Code Git | 에디터 내장 Git | 초보~중급 |
| tig | 터미널에서 git log 예쁘게 보기 | 중급 |
| lazygit | 터미널 Git UI | 중급 |
| GitHub CLI (gh) | 터미널에서 PR/Issue 관리 | 중급 |
명령어 치트시트¶
# 일상 (매일 씀)
git status # 상태 확인
git add . # 전체 스테이징
git commit -m "메시지" # 커밋
git push # 올리기
git pull # 받기
# 브랜치
git checkout -b feature/xxx # 브랜치 만들고 이동
git merge feature/xxx # 병합
git branch -d feature/xxx # 삭제
# 되돌리기
git restore 파일 # 수정 취소
git restore --staged 파일 # 스테이징 취소
git reset --soft HEAD~1 # 최근 커밋 되돌리기 (안전)
git revert 커밋해시 # 커밋 취소 (히스토리 유지)
# 임시 보관
git stash # 임시 저장
git stash pop # 임시 저장 복구
# 정보 확인
git log --oneline --graph # 히스토리 보기
git diff # 변경사항 보기
git remote -v # 원격 저장소 확인
이전 장: 05-github-collaboration.md 축하합니다! Git과 GitHub의 기초를 모두 배웠습니다 🎉