🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install supercent-io/skills-template/git-workflow

💡 提示:需要 Node.js 和 NPM

Git 工作流

何时使用此技能

  • 创建有意义的提交消息
  • 管理分支
  • 合并代码
  • 解决冲突
  • 与团队协作
  • Git 最佳实践

指示

步骤 1:分支管理

创建功能分支

# 创建并切换到新分支
git checkout -b feature/feature-name

# 或者从特定提交创建
git checkout -b feature/feature-name <提交哈希>

命名约定

  • feature/描述:新功能
  • bugfix/描述:错误修复
  • hotfix/描述:紧急修复
  • refactor/描述:代码重构
  • docs/描述:文档更新

步骤 2:进行更改

暂存更改

# 暂存特定文件
git add file1.py file2.js

# 暂存所有更改
git add .

# 使用补丁模式暂存(交互式)
git add -p

检查状态

# 查看更改内容
git status

# 查看详细差异
git diff

# 查看已暂存的差异
git diff --staged

步骤 3:提交

编写良好的提交消息

git commit -m "type(scope): subject

详细描述更改内容和原因。

- 更改 1
- 更改 2

修复 #123"

提交类型

  • feat:新功能
  • fix:错误修复
  • docs:文档
  • style:格式调整,无代码更改
  • refactor:代码重构
  • test:添加测试
  • chore:维护工作

示例

git commit -m "feat(auth): 添加 JWT 认证

- 实现 JWT 令牌生成
- 添加令牌验证中间件
- 更新用户模型,添加刷新令牌

关闭 #42"

步骤 4:推送更改

# 推送到远程
git push origin feature/feature-name

# 强制推送(谨慎使用!)
git push origin feature/feature-name --force-with-lease

# 设置上游并推送
git push -u origin feature/feature-name

步骤 5:拉取和更新

# 拉取最新更改
git pull origin main

# 使用变基拉取(更清晰的历史)
git pull --rebase origin main

# 仅获取,不合并
git fetch origin

步骤 6:合并

合并功能分支

# 切换到主分支
git checkout main

# 合并功能
git merge feature/feature-name

# 不使用快进合并(创建合并提交)
git merge --no-ff feature/feature-name

使用变基代替合并

# 在功能分支上
git checkout feature/feature-name

# 变基到主分支
git rebase main

# 解决冲突后继续
git rebase --continue

# 中止变基
git rebase --abort

步骤 7:解决冲突

当冲突发生时

# 查看冲突文件
git status

# 打开文件并解决冲突
# 查找标记:
<<<<< HEAD
当前分支代码
=======
传入分支代码
>>>>> feature-branch

# 解决后
git add <已解决文件>
git commit  # 对于合并
git rebase --continue  # 对于变基

步骤 8:清理

# 删除本地分支
git branch -d feature/feature-name

# 强制删除
git branch -D feature/feature-name

# 删除远程分支
git push origin --delete feature/feature-name

# 清理过时的引用
git fetch --prune

高级工作流

交互式变基

# 变基最近 3 次提交
git rebase -i HEAD~3

# 编辑器中的命令:
# pick: 使用提交
# reword: 修改提交消息
# edit: 修改提交内容
# squash: 与前一个提交合并
# fixup: 类似 squash,但丢弃消息
# drop: 移除提交

暂存更改

# 暂存当前更改
git stash

# 带消息暂存
git stash save "功能 X 的进行中工作"

# 列出所有暂存
git stash list

# 应用最近的暂存
git stash apply

# 应用并移除暂存
git stash pop

# 应用特定暂存
git stash apply stash@{2}

# 删除暂存
git stash drop stash@{0}

# 清除所有暂存
git stash clear

拣选提交

# 应用特定提交
git cherry-pick <提交哈希>

# 拣选多个提交
git cherry-pick <哈希1> <哈希2> <哈希3>

# 拣选但不提交
git cherry-pick -n <提交哈希>

二分查找(寻找错误)

# 开始二分查找
git bisect start

# 标记当前为坏
git bisect bad

# 标记已知好的提交
git bisect good <提交哈希>

# Git 会检出提交供测试
# 测试并标记每个:
git bisect good  # 如果正常
git bisect bad   # 如果损坏

# 找到后,重置
git bisect reset

示例

示例 1:功能开发工作流

# 1. 创建功能分支
git checkout main
git pull origin main
git checkout -b feature/user-profile

# 2. 进行更改
# ... 编辑文件 ...

# 3. 提交更改
git add src/profile/
git commit -m "feat(profile): 添加用户资料页面

- 创建资料组件
- 添加资料 API 端点
- 添加资料测试"

# 4. 保持与主分支同步
git fetch origin
git rebase origin/main

# 5. 推送到远程
git push origin feature/user-profile

# 6. 在 GitHub/GitLab 上创建拉取请求
# ... 审查和批准后 ...

# 7. 合并并清理
git checkout main
git pull origin main
git branch -d feature/user-profile

示例 2:热修复工作流

# 1. 从生产环境创建热修复分支
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug

# 2. 修复错误
# ... 进行修复 ...

# 3. 提交
git add .
git commit -m "hotfix: 修复关键登录错误

修复认证绕过漏洞

修复 #999"

# 4. 立即推送并合并
git push origin hotfix/critical-bug

# 合并后:
# 5. 清理
git checkout main
git pull origin main
git branch -d hotfix/critical-bug

示例 3:协作工作流

# 1. 更新主分支
git checkout main
git pull origin main

# 2. 创建功能分支
git checkout -b feature/new-feature

# 3. 定期从主分支更新
git fetch origin
git rebase origin/main

# 4. 推送您的工作
git push origin feature/new-feature

# 5. 如果队友更改了您的分支
git pull origin feature/new-feature --rebase

# 6. 解决任何冲突
# ... 解决冲突 ...
git add .
git rebase --continue

# 7. 变基后强制推送
git push origin feature/new-feature --force-with-lease

最佳实践

  1. 频繁提交:小型、聚焦的提交
  2. 有意义的消息:解释做了什么和为什么
  3. 推送前先拉取:保持更新
  4. 提交前审查:检查您要提交的内容
  5. 使用分支:永远不要直接提交到主分支
  6. 保持历史整洁:对功能分支使用变基
  7. 推送前测试:在本地运行测试
  8. 使用描述性的分支名称:易于理解
  9. 删除已合并的分支:保持仓库整洁
  10. 使用 .gitignore:不提交生成的文件

常见模式

撤销最后一次提交(保留更改)

git reset --soft HEAD~1

撤销最后一次提交(丢弃更改)

git reset --hard HEAD~1

修改最后一次提交

# 更改提交消息
git commit --amend -m "新消息"

# 添加文件到最后一次提交
git add forgotten-file.txt
git commit --amend --no-edit

查看历史

# 详细日志
git log

# 每行显示一个提交
git log --oneline

# 带图形显示
git log --oneline --graph --all

# 最近 5 次提交
git log -5

# 按作者查看提交
git log --author="张三"

# 查看日期范围内的提交
git log --since="2 周前"

查找提交

# 搜索提交消息
git log --grep="关键词"

# 搜索代码更改
git log -S "function_name"

# 显示文件历史
git log --follow -- path/to/file

故障排除

意外提交到错误分支

# 1. 从当前状态创建正确分支
git branch feature/correct-branch

# 2. 重置当前分支
git reset --hard HEAD~1

# 3. 切换到正确分支
git checkout feature/correct-branch

需要撤销合并

# 如果尚未推送
git reset --hard HEAD~1

# 如果已经推送(创建还原提交)
git revert -m 1 <合并提交哈希>

恢复已删除的分支

# 查找丢失的提交
git reflog

# 从丢失的提交创建分支
git checkout -b recovered-branch <提交哈希>

同步复刻与上游

# 添加上游远程
git remote add upstream https://github.com/original/repo.git

# 获取上游
git fetch upstream

# 合并上游主分支
git checkout main
git merge upstream/main

# 推送到您的复刻
git push origin main

Git 配置

用户设置

git config --global user.name "您的姓名"
git config --global user.email "您的邮箱@example.com"

别名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
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 config --global core.editor "code --wait"  # VS Code
git config --global core.editor "vim"           # Vim

参考资料

📄 原始文档

完整文档(英文):

https://skills.sh/supercent-io/skills-template/git-workflow

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。