npx skills add https://github.com/dalestudy/skills --skill gitGit 版本管理最佳实践及工作流程指南。
提交信息遵循 <type>: <description> 格式:
feat: add form validation to login page
fix: prevent duplicate email check error on signup
docs: add installation guide to README
refactor: extract auth logic into separate module
test: add payment feature tests
chore: update dependencies
| 类型 | 说明 | 示例 |
|---|---|---|
feat | 新增功能 | feat: add dark mode support |
fix |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 修复错误 |
fix: prevent token deletion on logout |
docs | 文档变更(无代码变更) | docs: update API documentation |
style | 代码格式化、分号缺失(无行为变更) | style: apply ESLint rules |
refactor | 重构(无功能变更) | refactor: extract utility functions |
test | 测试代码添加/修改 | test: add login API tests |
chore | 构建、配置变更(无 src 变更) | chore: update Webpack config |
perf | 性能优化 | perf: implement lazy loading for images |
<type>(<scope>): <subject>
<body>
<footer>
示例:
feat(auth): implement JWT-based authentication
- Issue access and refresh tokens
- Store refresh tokens in Redis
- Add token renewal API endpoint
Closes #123
# ❌ 缺少类型
git commit -m "bug fix"
# ❌ 描述模糊
git commit -m "fix: fix issue"
# ❌ 一个提交包含多个任务
git commit -m "feat: implement login, signup, and password reset"
# ✅ 清晰且单一职责
git commit -m "feat: add form validation to login page"
Feat: (X) → feat: (O)feat: add feature. (X) → feat: add feature (O)main (始终处于可部署状态)
├── feature/login-form
├── fix/payment-error
└── refactor/user-service
创建新仓库时,使用 main 作为默认分支(替代过去的 master):
# 初始化新仓库时以 main 分支开始
git init -b main
# 或修改现有仓库的默认分支
git branch -m master main
git push -u origin main
# Git 全局设置(应用于所有新仓库)
git config --global init.defaultBranch main
注意:GitHub、GitLab、Bitbucket 等大多数 Git 托管服务自 2020 年起已将默认分支设为 main。
# 格式:<type>/<description>
feature/user-authentication
fix/header-layout-bug
refactor/payment-module
docs/api-documentation
test/user-service
chore/update-dependencies
# 1. 从 main 获取最新状态
git switch main
git pull origin main
# 2. 创建新分支
git switch -c feature/dark-mode
# 3. 工作后提交
git add .
git commit -m "feat: add dark mode toggle button"
# 4. 推送到远程分支
git push origin feature/dark-mode
# 5. 在 GitHub 上创建 PR
gh pr create --title "feat: add dark mode support" --body "..."
# 6. 代码审查后合并到 main(GitHub UI 或 CLI)
gh pr merge <PR编号> --squash # 或 --merge, --rebase
# 7. 更新本地 main 并删除分支
git switch main
git pull origin main
git branch -d feature/dark-mode
| 策略 | 说明 | 何时使用 |
|---|---|---|
| Squash | 将所有提交合并为一个 | 功能分支(推荐) |
| Merge | 创建合并提交,保留历史 | 发布分支 |
| Rebase | 保持线性历史,无合并提交 | 简单变更,整洁历史 |
# Squash(推荐 - 按功能整理提交)
gh pr merge 123 --squash
# Merge(保留历史)
gh pr merge 123 --merge
# Rebase(线性历史)
gh pr merge 123 --rebase
# 修改最近 3 个提交
git rebase -i HEAD~3
# 在编辑器中选择命令
# pick → 保留提交
# reword → 修改提交信息
# edit → 修改提交
# squash → 合并到前一个提交
# fixup → 合并到前一个提交(移除信息)
# drop → 删除提交
示例:
# Before
pick a1b2c3d feat: implement login feature
pick d4e5f6g fix: typo in variable name
pick g7h8i9j fix: rename variable for clarity
# After(使用 squash)
pick a1b2c3d feat: implement login feature
fixup d4e5f6g fix: typo in variable name
fixup g7h8i9j fix: rename variable for clarity
# 1. 更新 main
git switch main
git pull origin main
# 2. 将 feature 分支 rebase 到 main 之上
git switch feature/my-feature
git rebase main
# 3. 发生冲突时
# - 修改文件后
git add .
git rebase --continue
# - 想取消 rebase
git rebase --abort
# 仅应用其他分支的一个提交
git cherry-pick <commit-hash>
# 应用多个提交
git cherry-pick <commit-hash1> <commit-hash2>
# 发生冲突时
git add .
git cherry-pick --continue
# 仅修改最后一次提交信息
git commit --amend -m "fix: correct commit message"
# 向最后一次提交添加文件
git add forgotten-file.ts
git commit --amend --no-edit
# ⚠️ 注意:已推送的提交禁止 amend(会改变历史)
# Reset - 撤销提交(删除历史)
git reset --soft HEAD~1 # 仅撤销提交,保留变更
git reset --mixed HEAD~1 # 撤销提交 + staging,保留变更(默认值)
git reset --hard HEAD~1 # 删除提交 + 所有变更(危险!)
# ⚠️ 已推送的提交禁止 reset → 使用 revert
# Revert - 创建撤销提交的新提交(保留历史)
git revert <commit-hash>
git revert HEAD # 撤销最后一次提交
# 合并或 rebase main 时发生冲突
git merge main
# 或
git rebase main
# Auto-merging src/index.ts
# CONFLICT (content): Merge conflict in src/index.ts
# 1. 确认冲突文件
git status
# 2. 打开文件手动修改
# <<<<<<< HEAD(当前分支)
# 我的变更
# =======
# 对方分支的变更
# >>>>>>> main
# 3. 移除标记并修改代码
# 4. 将已解决的文件 staging
git add src/index.ts
# 5. 完成合并
git merge --continue
# 或继续 Rebase
git rebase --continue
# 优先当前分支变更
git restore --ours <file>
# 优先对方分支变更
git restore --theirs <file>
# 取消合并
git merge --abort
# 取消 rebase
git rebase --abort
# 切换到现有分支
git switch main
git switch feature/my-feature
# 创建新分支 + 切换
git switch -c feature/new-feature
# 返回上一个分支
git switch -
# 跟踪远程分支并切换
git switch -c local-branch origin/remote-branch
注意:自 Git 2.23+(2019 年 8 月)起使用 git switch。原有的 git checkout 负责分支切换、文件恢复等多种角色,容易造成混淆。git switch 仅负责分支切换。
# 恢复工作目录文件(取消 unstaged 变更)
git restore <file>
# 取消 Staging(恢复到 unstaged 状态)
git restore --staged <file>
# 恢复工作目录 + Staging 两者
git restore --staged --worktree <file>
# 恢复到特定提交的文件
git restore --source=<commit-hash> <file>
注意:git restore 是专门用于文件恢复的命令。替代原有的 git checkout -- <file>。
git status # 确认变更
git log --oneline # 提交历史(单行)
git log --graph # 分支图
git diff # 确认变更内容
git diff --staged # staging 的变更内容
git show <commit-hash> # 查看特定提交详情
git stash # 临时保存当前工作
git stash list # 已保存的 stash 列表
git stash pop # 应用最后一个 stash + 删除
git stash apply # 应用最后一个 stash(保留)
git stash drop # 删除最后一个 stash
git stash clear # 删除所有 stash
git remote -v # 确认远程仓库
git fetch origin # 获取远程变更(不合并)
git pull origin main # 获取远程变更 + 合并
git push origin main # 推送本地变更
git push -f origin main # 强制推送(⚠️ 危险 - 团队协作时禁止)
git -C# ❌ 当前目录是目标仓库却使用 -C 选项
git -C /path/to/current/repo log --oneline
# ✅ 在当前目录中直接执行
git log --oneline
当前目录与工作目标仓库相同时,git -C 选项是不必要的重复。仅在针对其他路径的仓库时才使用。
# 添加到 .gitignore
.env # 环境变量(API 密钥、密码)
.env.local
*.key # 证书密钥
*.pem
secrets/ # 密钥目录
node_modules/ # 依赖项(通过 package.json 管理)
dist/ # 构建结果
.DS_Store # macOS 系统文件
# ⚠️ 从历史中完全删除(使用 BFG 替代 git filter-branch)
brew install bfg
bfg --delete-files .env
git reflog expire --expire=now --all && git gc --prune=now --aggressive
# ⚠️ 注意:如果已推送,必须立即作废密钥并重新签发
# ❌ 绝对禁止对 main/develop 进行 force push
git push -f origin main
# ✅ 仅在个人 feature 分支中允许
git push -f origin feature/my-branch
# 创建 PR
gh pr create --title "feat: add new feature" --body "Description..."
# 确认 PR 列表
gh pr list
# 查看 PR 详情
gh pr view 123
# 检出 PR(本地测试)
gh pr checkout 123
# 合并 PR
gh pr merge 123 --squash
# 创建 Issue
gh issue create --title "Bug found" --body "Description..."
Weekly Installs
96
Repository
GitHub Stars
4
First Seen
Feb 2, 2026
Security Audits
Installed on
opencode94
claude-code94
codex94
cursor94
github-copilot93
gemini-cli93
Git 버전 관리 모범 관례 및 워크플로우 가이드.
커밋 메시지는 <type>: <description> 형식을 따른다:
feat: add form validation to login page
fix: prevent duplicate email check error on signup
docs: add installation guide to README
refactor: extract auth logic into separate module
test: add payment feature tests
chore: update dependencies
| 타입 | 설명 | 예시 |
|---|---|---|
feat | 새로운 기능 추가 | feat: add dark mode support |
fix | 버그 수정 | fix: prevent token deletion on logout |
docs | 문서 변경 (코드 변경 없음) | docs: update API documentation |
style | 코드 포맷팅, 세미콜론 누락 (동작 변경 X) | style: apply ESLint rules |
refactor | 리팩토링 (기능 변경 없음) | refactor: extract utility functions |
test | 테스트 코드 추가/수정 | test: add login API tests |
chore | 빌드, 설정 변경 (src 변경 없음) | chore: update Webpack config |
perf | 성능 개선 | perf: implement lazy loading for images |
<type>(<scope>): <subject>
<body>
<footer>
예시:
feat(auth): implement JWT-based authentication
- Issue access and refresh tokens
- Store refresh tokens in Redis
- Add token renewal API endpoint
Closes #123
# ❌ 타입 누락
git commit -m "bug fix"
# ❌ 모호한 설명
git commit -m "fix: fix issue"
# ❌ 한 커밋에 여러 작업
git commit -m "feat: implement login, signup, and password reset"
# ✅ 명확하고 단일 책임
git commit -m "feat: add form validation to login page"
Feat: (X) → feat: (O)feat: add feature. (X) → feat: add feature (O)main (항상 배포 가능한 상태)
├── feature/login-form
├── fix/payment-error
└── refactor/user-service
새 저장소 생성 시 기본 브랜치는 main을 사용한다 (과거의 master 대신):
# 새 저장소 초기화 시 main 브랜치로 시작
git init -b main
# 또는 기존 저장소에서 기본 브랜치 변경
git branch -m master main
git push -u origin main
# Git 전역 설정 (모든 새 저장소에 적용)
git config --global init.defaultBranch main
참고 : GitHub, GitLab, Bitbucket 등 대부분의 Git 호스팅 서비스는 2020년부터 기본 브랜치를 main으로 사용한다.
# 형식: <type>/<description>
feature/user-authentication
fix/header-layout-bug
refactor/payment-module
docs/api-documentation
test/user-service
chore/update-dependencies
# 1. main에서 최신 상태 받기
git switch main
git pull origin main
# 2. 새 브랜치 생성
git switch -c feature/dark-mode
# 3. 작업 후 커밋
git add .
git commit -m "feat: add dark mode toggle button"
# 4. 원격 브랜치에 푸시
git push origin feature/dark-mode
# 5. GitHub에서 PR 생성
gh pr create --title "feat: add dark mode support" --body "..."
# 6. 코드 리뷰 후 main에 병합 (GitHub UI 또는 CLI)
gh pr merge <PR번호> --squash # 또는 --merge, --rebase
# 7. 로컬 main 업데이트 및 브랜치 삭제
git switch main
git pull origin main
git branch -d feature/dark-mode
| 전략 | 설명 | 언제 사용 |
|---|---|---|
| Squash | 모든 커밋을 하나로 합침 | 기능 브랜치 (권장) |
| Merge | 병합 커밋 생성, 히스토리 보존 | 릴리스 브랜치 |
| Rebase | 선형 히스토리 유지, 병합 커밋 X | 간단한 변경, 깔끔한 히스토리 |
# Squash (권장 - 기능 단위로 커밋 정리)
gh pr merge 123 --squash
# Merge (히스토리 보존)
gh pr merge 123 --merge
# Rebase (선형 히스토리)
gh pr merge 123 --rebase
# 최근 3개 커밋 수정
git rebase -i HEAD~3
# 에디터에서 명령어 선택
# pick → 커밋 유지
# reword → 커밋 메시지 수정
# edit → 커밋 수정
# squash → 이전 커밋에 합침
# fixup → 이전 커밋에 합침 (메시지 제거)
# drop → 커밋 삭제
예시:
# Before
pick a1b2c3d feat: implement login feature
pick d4e5f6g fix: typo in variable name
pick g7h8i9j fix: rename variable for clarity
# After (squash 사용)
pick a1b2c3d feat: implement login feature
fixup d4e5f6g fix: typo in variable name
fixup g7h8i9j fix: rename variable for clarity
# 1. main 최신화
git switch main
git pull origin main
# 2. feature 브랜치를 main 위로 rebase
git switch feature/my-feature
git rebase main
# 3. 충돌 발생 시
# - 파일 수정 후
git add .
git rebase --continue
# - rebase 취소하고 싶다면
git rebase --abort
# 다른 브랜치의 커밋 하나만 적용
git cherry-pick <commit-hash>
# 여러 커밋 적용
git cherry-pick <commit-hash1> <commit-hash2>
# 충돌 발생 시
git add .
git cherry-pick --continue
# 마지막 커밋 메시지만 수정
git commit --amend -m "fix: correct commit message"
# 마지막 커밋에 파일 추가
git add forgotten-file.ts
git commit --amend --no-edit
# ⚠️ 주의: 이미 push한 커밋은 amend 금지 (히스토리 변경됨)
# Reset - 커밋 취소 (히스토리 삭제)
git reset --soft HEAD~1 # 커밋만 취소, 변경사항 유지
git reset --mixed HEAD~1 # 커밋 + staging 취소, 변경사항 유지 (기본값)
git reset --hard HEAD~1 # 커밋 + 변경사항 모두 삭제 (위험!)
# ⚠️ push한 커밋은 reset 금지 → revert 사용
# Revert - 커밋을 되돌리는 새 커밋 생성 (히스토리 보존)
git revert <commit-hash>
git revert HEAD # 마지막 커밋 되돌리기
# main을 merge하거나 rebase할 때 충돌 발생
git merge main
# 또는
git rebase main
# Auto-merging src/index.ts
# CONFLICT (content): Merge conflict in src/index.ts
# 1. 충돌 파일 확인
git status
# 2. 파일 열어서 수동 수정
# <<<<<<< HEAD (현재 브랜치)
# 내 변경사항
# =======
# 상대 브랜치의 변경사항
# >>>>>>> main
# 3. 마커 제거하고 코드 수정
# 4. 해결된 파일 staging
git add src/index.ts
# 5. Merge 완료
git merge --continue
# 또는 Rebase 계속
git rebase --continue
# 현재 브랜치 변경사항 우선
git restore --ours <file>
# 상대 브랜치 변경사항 우선
git restore --theirs <file>
# merge 취소
git merge --abort
# rebase 취소
git rebase --abort
# 기존 브랜치로 전환
git switch main
git switch feature/my-feature
# 새 브랜치 생성 + 전환
git switch -c feature/new-feature
# 이전 브랜치로 돌아가기
git switch -
# 원격 브랜치 추적하며 전환
git switch -c local-branch origin/remote-branch
참고 : Git 2.23+ (2019년 8월)부터 git switch를 사용한다. 기존 git checkout은 브랜치 전환, 파일 복원 등 여러 역할을 담당해 혼란을 야기했다. git switch는 브랜치 전환만 담당한다.
# 작업 디렉토리 파일 복원 (unstaged 변경사항 취소)
git restore <file>
# Staging 취소 (unstaged로 되돌림)
git restore --staged <file>
# 작업 디렉토리 + Staging 모두 복원
git restore --staged --worktree <file>
# 특정 커밋의 파일로 복원
git restore --source=<commit-hash> <file>
참고 : git restore는 파일 복원 전용 명령어다. 기존 git checkout -- <file>을 대체한다.
git status # 변경사항 확인
git log --oneline # 커밋 히스토리 (한 줄)
git log --graph # 브랜치 그래프
git diff # 변경 내용 확인
git diff --staged # staging된 변경 내용
git show <commit-hash> # 특정 커밋 상세보기
git stash # 현재 작업 임시 저장
git stash list # 저장된 stash 목록
git stash pop # 마지막 stash 적용 + 삭제
git stash apply # 마지막 stash 적용 (유지)
git stash drop # 마지막 stash 삭제
git stash clear # 모든 stash 삭제
git remote -v # 원격 저장소 확인
git fetch origin # 원격 변경사항 가져오기 (병합 X)
git pull origin main # 원격 변경사항 가져오기 + 병합
git push origin main # 로컬 변경사항 푸시
git push -f origin main # 강제 푸시 (⚠️ 위험 - 팀 작업 시 금지)
git -C 사용# ❌ 현재 디렉토리가 대상 레포지토리인데 -C 옵션 사용
git -C /path/to/current/repo log --oneline
# ✅ 현재 디렉토리에서 바로 실행
git log --oneline
현재 디렉토리가 작업 대상 레포지토리와 동일하면 git -C 옵션은 불필요한 중복이다. 다른 경로의 레포지토리를 대상으로 할 때만 사용한다.
# .gitignore에 추가
.env # 환경 변수 (API 키, 비밀번호)
.env.local
*.key # 인증서 키
*.pem
secrets/ # 시크릿 디렉토리
node_modules/ # 의존성 (package.json으로 관리)
dist/ # 빌드 결과물
.DS_Store # macOS 시스템 파일
# ⚠️ 히스토리에서 완전 삭제 (git filter-branch 대신 BFG 사용)
brew install bfg
bfg --delete-files .env
git reflog expire --expire=now --all && git gc --prune=now --aggressive
# ⚠️ 주의: 이미 푸시했다면 시크릿 즉시 폐기 후 재발급 필수
# ❌ main/develop에 force push 절대 금지
git push -f origin main
# ✅ 개인 feature 브랜치에서만 허용
git push -f origin feature/my-branch
# PR 생성
gh pr create --title "feat: add new feature" --body "Description..."
# PR 목록 확인
gh pr list
# PR 상세보기
gh pr view 123
# PR 체크아웃 (로컬에서 테스트)
gh pr checkout 123
# PR 병합
gh pr merge 123 --squash
# Issue 생성
gh issue create --title "Bug found" --body "Description..."
Weekly Installs
96
Repository
GitHub Stars
4
First Seen
Feb 2, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode94
claude-code94
codex94
cursor94
github-copilot93
gemini-cli93
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
120,000 周安装
Agently TriggerFlow 状态与资源管理:runtime_data、flow_data 和运行时资源详解
1 周安装
Agently Tools 工具系统详解:Python 代理工具注册、循环控制与内置工具使用
1 周安装
Agently Prompt配置文件技能:YAML/JSON提示模板加载、映射与导出指南
1 周安装
Agently多智能体模式指南:架构设计、核心模式与实现方案
1 周安装
Agently MCP集成指南:连接外部MCP服务器工具,扩展AI智能体能力
1 周安装
Agently 知识库与 RAG 技能:基于 Chroma 的向量检索与生成式问答集成指南
1 周安装