효율적인 Git 워크플로우를 위한 실전 팁과 문제 해결 방법을 알아봅니다.
여러 브랜치에서 작업할 때 발생하는 일반적인 상황들을 어떻게 다루는지 실제 사례를 통해 배워보세요.
하나의 브랜치에서 여러 가지 서로 다른 변경사항을 작업했을 때, 이를 논리적으로 분리된 커밋으로 나누는 것이 좋습니다.
이렇게 하면 코드 리뷰가 쉬워지고, 변경 히스토리를 더 명확하게 추적할 수 있습니다.
예를 들어, fix/auth-refresh 브랜치에서 다음과 같은 변경사항이 있었습니다:
axios-interceptor.ts)decodeToken.ts)package.json, package-lock.json)git add -p 명령어를 사용하면 변경된 파일의 각 부분을 선택적으로 스테이징할 수 있습니다:
# 변경된 파일들을 한 부분씩 검토하면서 스테이징
git add -p
# 첫 번째 변경사항에 대한 커밋
git commit -m "fix: API헤더에 알맞는 헤더명으로 변경"
# 나머지 변경사항 스테이징 및 커밋
git add .
git commit -m "refactor: improve JWT token decoding function"
변경사항이 파일별로 깔끔하게 구분된다면, 파일 단위로 스테이징하는 방법도 있습니다:
# 첫 번째 변경사항 관련 파일만 스테이징
git add src/api/axios-interceptor.ts App.tsx
# 첫 번째 커밋
git commit -m "fix: API헤더에 알맞는 헤더명으로 변경"
# 나머지 파일 스테이징 및 커밋
git add package.json package-lock.json src/utils/auth/decodeToken.ts
git commit -m "refactor: improve JWT token decoding function"
main 브랜치에 새로운 변경사항이 있고, 작업 중인 기능 브랜치를 최신 상태로 업데이트해야 할 때 두 가지 방법이 있습니다.
git checkout feat/verify-email
git pull origin main
git rebase main은 기본적으로 로컬의 main 브랜치를 의미합니다.
하지만 대부분의 경우 실제로는 원격 저장소(origin)의 최신 main 브랜치로 업데이트하고 싶을 것입니다.
따라서 제대로 된 리베이스 과정은 보통 다음과 같습니다:
# 먼저 로컬 main 브랜치를 origin의 최신 main으로 업데이트
git checkout main
git pull origin main
# 그 다음 기능 브랜치로 이동해서 최신 main에 리베이스
git checkout feat/verify-email
git rebase main
--force 옵션 필요).merge 전/후:
A---B---C (main)
\
D---E (feat/branch)
# merge 후
A---B---C (main)
\ \
D---E---F (feat/branch, F는 병합 커밋)
rebase 전/후:
A---B---C (main)
\
D---E (feat/branch)
# rebase 후
A---B---C (main)
\
D'---E' (feat/branch)
변경사항이 많은 경우에는 일반적인 병합 방식이 더 실용적입니다.
스태시는 작업 중인 변경사항을 임시로 저장해 두는 Git의 기능입니다. 브랜치를 전환하거나 다른 작업을 먼저 해야 할 때 유용합니다.
스태시와 브랜치 리베이스를 함께 사용할 때는 순서가 중요합니다:
# 먼저 브랜치를 최신 main으로 리베이스
git checkout feat/verify-email
git rebase main
# 그 다음 스태시를 적용
git stash pop stash@{1}
GitHub에서 "Delete branch" 버튼은 원격 브랜치만 삭제합니다. 로컬 브랜치는 직접 삭제해야 합니다:
# 원격 브랜치 정보 업데이트
git fetch -p
# 로컬 브랜치 삭제
git branch -d fix/auth-refresh
이미 존재하는 브랜치에 추가 커밋을 푸시하면, 해당 브랜치에 대한 PR이 이미 존재하는 경우 그 PR에 커밋이 추가됩니다:
git push origin fix/auth-refresh
GitHub는 새 브랜치가 푸시될 때마다 PR 생성 링크를 표시하지만, 이미 PR이 존재한다면 기존 PR이 업데이트됩니다.
Git과 GitHub을 효율적으로 활용하려면 브랜치, 커밋, 스태시 등의 기능을 상황에 맞게 적절히 사용하는 것이 중요합니다. 이 글에서 다룬 실전 팁들이 여러분의 개발 워크플로우를 더 효율적으로 만드는 데 도움이 되기를 바랍니다.
특히 팀 프로젝트에서는 커밋을 논리적 단위로 분리하고, 브랜치를 최신 상태로 유지하는 습관이 중요합니다. 또한 변경사항의 규모와 상황에 따라 merge와 rebase를 적절히 선택하여 사용하는 것이 좋습니다.