인터랙티브 리베이싱(interactive rebasing), 충돌 해결, 히스토리 조작, 버그 추적을 위한 bisect, cherry-picking, reflog 복구 및 브랜치 관리 전략을 포함한 고급 Git 작업 및 워크플로우입니다. 사용 사례: (1) 인터랙티브 리베이싱 및 커밋 정리, (2) 복잡한 머지 충돌 해결, (3) 버그 추적을 위한 Git bisect, (4) 히스토리 재작성 및 정리, (5) 브랜치 전략 구현 (Git Flow, trunk-based), (6) reflog를 이용한 유실된 커밋 복구
/plugin marketplace add icartsh/icartsh_plugin/plugin install icartsh-plugin@icartsh-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
README.mdexamples/branch_strategies.mdexamples/conflict_resolution.mdexamples/interactive_rebase.mdreferences/best-practices.mdreferences/branch-management.mdreferences/reflog-recovery.mdreferences/troubleshooting.mdscripts/git_helper.sh복잡한 버전 관리 시나리오를 위한 고급 Git 워크플로우를 마스터하세요. 이 SKILL은 기본적인 커밋과 머지를 넘어 인터랙티브 리베이싱, 고급 충돌 해결, 히스토리 조작 및 전략적 브랜치 관리를 포함한 정교한 작업들을 다룹니다.
다음을 수행할 때 이 SKILL을 사용하세요:
# 최근 5개 커밋을 인터랙티브하게 리베이즈
git rebase -i HEAD~5
# main 브랜치를 대상으로 리베이즈
git rebase -i main
# 충돌 해결 후 계속 진행
git rebase --continue
# 중단하고 원래 상태로 복구
git rebase --abort
# '우리 것'(현재 브랜치) 선택
git checkout --ours <file>
# '그들 것'(들어오는 브랜치) 선택
git checkout --theirs <file>
# 충돌 발생 파일 목록 확인
git diff --name-only --diff-filter=U
# 해결됨으로 표시
git add <file>
# bisect 세션 시작
git bisect start
git bisect bad
git bisect good <commit-hash>
# 테스트 스크립트로 자동화
git bisect run ./test-script.sh
# bisect 세션 종료
git bisect reset
# 특정 커밋 적용
git cherry-pick <commit-hash>
# 커밋하지 않고 cherry-pick (스테이징만 수행)
git cherry-pick -n <commit-hash>
# 커밋 범위 cherry-pick
git cherry-pick A^..B
# reflog 히스토리 확인
git reflog
# 유실된 커밋 복구
git checkout -b recovery <commit-hash>
# 이전 상태로 리셋
git reset --hard HEAD@{2}
사용 시기:
단계:
# 1. 최근 N개 커밋에 대해 인터랙티브 리베이즈 시작
git rebase -i HEAD~5
# 커밋 목록이 포함된 인터랙티브 에디터가 열림
# 히스토리 재구성을 위해 명령어를 수정
리베이즈 명령어:
pick (p): 커밋 그대로 유지reword (r): 커밋은 유지하되 메시지 수정edit (e): 커밋을 유지하되 수정을 위해 멈춤 (amend 가능)squash (s): 이전 커밋과 합치고 메시지 유지fixup (f): 이전 커밋과 합치되 메시지는 버림drop (d): 커밋을 완전히 제거예시:
# 수정 전
pick abc1234 Add feature X
pick def5678 Fix typo
pick ghi9012 WIP commit
pick jkl3456 Update documentation
# 정리 후
pick abc1234 Add feature X
fixup def5678 Fix typo
drop ghi9012 WIP commit
reword jkl3456 Update documentation
안전 팁:
git branch backupgit reflog를 사용하세요.git push --force-with-lease상세 예시와 고급 기법은 examples/interactive_rebase.md를 참조하세요.
충돌 마커 이해하기:
<<<<<<< HEAD (현재 변경 사항)
현재 브랜치의 코드
=======
머지하려는 브랜치의 코드
>>>>>>> branch-name (들어오는 변경 사항)
해결 프로세스:
# 1. 충돌 발생 확인
git status
# 2. 해결 전략 선택:
# 전략 A: 수동 해결
vim <file> # 마커 사이의 내용 수정
git add <file>
# 전략 B: 한쪽 선택
git checkout --ours <file> # 내 것 유지
git checkout --theirs <file> # 상대 것 유지
git add <file>
# 전략 C: 머지 도구 사용
git mergetool
# 3. 작업 계속 진행
git merge --continue
# 또는
git rebase --continue
3-Way Diff 확인:
# '내가' 변경한 내용 확인
git diff --ours <file>
# '그들이' 변경한 내용 확인
git diff --theirs <file>
# 공통 조상(Base) 확인
git diff --base <file>
공통적인 충돌 패턴과 해결책은 examples/conflict_resolution.md를 참조하세요.
시나리오: 현재 버전에 버그가 있을 때, 어떤 커밋에서 도입되었는지 찾습니다.
수동 Bisect:
# 1. bisect 시작
git bisect start
# 2. 현재 상태를 'bad'로 마킹
git bisect bad
# 3. 버그가 없었던 과거 커밋을 'good'으로 마킹
git bisect good v1.0.0
# 4. 코드 테스트 (Git이 중간 지점 커밋을 체크아웃함)
# 앱을 실행하여 버그 존재 여부 확인
# 5. 결과 마킹
git bisect bad # 버그가 있는 경우
git bisect good # 버그가 없는 경우
# Git이 첫 번째 bad 커밋을 찾을 때까지 반복
# 6. bisect 종료
git bisect reset
자동화된 Bisect:
# 테스트 스크립트 작성 (test.sh)
#!/bin/bash
npm test
exit $?
# 자동화된 bisect 실행
git bisect start
git bisect bad
git bisect good v1.0.0
git bisect run ./test.sh
# Git이 자동으로 bad 커밋을 찾아냄
git bisect reset
빠른 정리:
# 헬퍼 스크립트 사용
bash scripts/git_helper.sh cleanup-branches
# 또는 수동 정리
git branch --merged main | grep -v "\*\|main\|develop" | xargs git branch -d
git fetch --prune
오래된 브랜치 감지:
# 마지막 커밋 날짜와 함께 브랜치 표시
for branch in $(git branch -r | grep -v HEAD); do
echo -e "$(git show --format="%ci %cr" $branch | head -n 1)\t$branch"
done | sort -r
상세한 브랜치 관리 전략은 references/branch-management.md를 참조하세요.
삭제된 브랜치 복구:
# reflog 확인
git reflog
# 브랜치가 삭제된 시점의 커밋 찾기
# 브랜치 복구
git checkout -b feature-x <commit-hash>
잘못된 Reset 되돌리기:
# 실수로 실행함: git reset --hard HEAD~5
# reflog 확인
git reflog
# 이전 상태로 복구
git reset --hard HEAD@{1}
유실된 커밋 찾기:
# 연결이 끊긴(dangling) 커밋 찾기
git fsck --lost-found
# 찾은 커밋을 cherry-pick
git cherry-pick <lost-commit-hash>
포괄적인 복구 기법은 references/reflog-recovery.md를 참조하세요.
이 SKILL은 다양한 브랜치 전략 구현을 지원합니다. 팀의 필요에 따라 선택하세요:
적합한 사례: 정기적인 릴리스 일정이 있고, 여러 운영 버전을 유지해야 하는 프로젝트
브랜치 유형:
main: 운영 환경에 배포 가능한 코드develop: 개발 통합 브랜치feature/*: 새로운 기능 개발release/*: 릴리스 준비hotfix/*: 운영 환경 긴급 수정빠른 시작:
# 기능 개발 시작
git checkout develop
git checkout -b feature/user-auth
# 작업 완료 후
git checkout develop
git merge --no-ff feature/user-auth
적합한 사례: 지속적 배포(CI/CD), 빠른 속도를 지향하는 팀
원칙:
빠른 시작:
# 짧은 수명의 브랜치 생성
git checkout main
git checkout -b feature/quick-fix
# 같은 날 작업 완료 및 머지
git checkout main
git merge feature/quick-fix
전체 브랜치 전략 워크플로우는 examples/branch_strategies.md를 참조하세요.
git branch backupgit statusgit log --onelinefeature/user-login포괄적인 모범 사례는 references/best-practices.md를 참조하세요.
# 충돌이 너무 복잡한 경우
git rebase --abort
# 다른 방식으로 다시 시작
git merge --no-ff <branch>
# 항상 reflog부터 확인
git reflog
# 커밋을 찾아 복구
git checkout -b recovery <commit-hash>
# 현재 상태에서 브랜치 생성
git checkout -b new-branch-name
# 또는 원래 브랜치로 복구
git checkout main
# 확실한 경우에만, 그리고 공유 브랜치가 아닐 때만 실행
git push --force-with-lease
# 더 안전한 방식: 새 브랜치 생성
git checkout -b feature-v2
git push origin feature-v2
상세한 트러블슈팅은 references/troubleshooting.md를 참조하세요.
examples/interactive_rebase.md: 시나리오별 단계적 리베이즈 예시examples/conflict_resolution.md: 공통 충돌 패턴 및 해결책examples/branch_strategies.md: 전체 Git Flow 및 Trunk-based 워크플로우references/branch-management.md: 브랜치 정리 자동화 및 전략references/reflog-recovery.md: 복구 기법 및 히스토리 재작성references/best-practices.md: 포괄적인 모범 사례 및 품질 표준references/troubleshooting.md: 일반적인 이슈 및 긴급 복구scripts/git_helper.sh: 브랜치 정리 및 충돌 해결 유틸리티# 인터랙티브 리베이즈
git rebase -i HEAD~N
# 작업 중단
git rebase --abort
git merge --abort
git cherry-pick --abort
# 히스토리 확인
git log --oneline --graph --all
git reflog
# 충돌 해결
git checkout --ours <file>
git checkout --theirs <file>
# 복구
git fsck --lost-found
git reflog
# 정리
git branch --merged | xargs git branch -d
git fetch --prune
git branch backup--force-with-lease 사용깔끔한 히스토리를 유지하고, 충돌을 효율적으로 해결하며, 복잡한 개발 워크플로우를 자신 있게 관리하기 위해 이 고급 Git 작업들을 마스터하세요.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.