关于 generating-patches
generating-patches 是将代码库修改导出为可移植 Git 补丁文件的技能,适用于需要把 Claude 对上传项目所做的编辑带回本地仓库的场景,并说明补丁的生成与应用方法。
主要功能
- 01导出工作区或暂存区差异
- 02用 format-patch 保留提交元数据
- 03处理二进制和大型补丁情况
- 04提供本地应用及故障排查步骤
- 05从补丁生成 PR 描述
适用场景
- 01转移上传代码库中的编辑
- 02为仓库打包已提交的修改
- 03按文件类型或目录拆分大型补丁
- 04根据变更文件准备 PR 摘要
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oaustegard/ claude-skills --skill generating-patches安装后在 Claude Code 中输入/generating-patches确认已加载。
附带文件README.md
详细介绍
生成补丁
从代码库修改生成可移植的 git 补丁文件,让用户能够将 Claude 的编辑应用到本地代码库。
适用场景
修改上传代码库中的文件后,如果用户需要将更改转回本地环境,请使用此功能。典型工作流:用户上传 zip → Claude 编辑文件 → 此技能将更改导出为补丁。
前提条件
确认 git 可用,且工作目录是 git 代码库(或可以初始化为代码库):
git status 2>/dev/null || git init
如果上传的代码库没有 git 历史记录,请先初始化并创建基线提交,然后再进行编辑:
git init
git add -A
git commit -m "Baseline: original uploaded state"
生成补丁
完成编辑后,生成统一差异:
# For uncommitted changes (working tree modifications)
git diff > /mnt/user-data/outputs/changes.patch
# If changes are staged but not committed
git diff --cached > /mnt/user-data/outputs/changes.patch
# For both staged and unstaged
git diff HEAD > /mnt/user-data/outputs/changes.patch
对于已提交的更改(保留提交消息和元数据):
# All commits since baseline
git format-patch --stdout baseline..HEAD > /mnt/user-data/outputs/changes.patch
# Or specify number of commits
git format-patch --stdout -n 3 > /mnt/user-data/outputs/changes.patch
处理边缘情况
二进制文件:Git diff 默认会排除二进制文件。如果二进制文件被修改,请提醒用户:
git diff --name-only --diff-filter=M | xargs file | grep -v "ASCII\|UTF-8\|empty"
大型补丁:对于大量更改,可考虑按目录或文件类型拆分:
git diff -- "*.py" > /mnt/user-data/outputs/python-changes.patch
git diff -- src/ > /mnt/user-data/outputs/src-changes.patch
未检测到更改:确认文件确实已修改。常见问题:
- 在 git 工作树之外的副本中进行了编辑
- 文件未由 git 跟踪(需要先执行
git add)
输出要求
始终将文件输出到 /mnt/user-data/outputs/,并使用描述性文件名。提供下载链接:
[Download changes.patch](computer:///mnt/user-data/outputs/changes.patch)
用户说明
每次交付补丁时,都要附上以下说明:
在本地应用此补丁:
cd /path/to/your/repo
# Preview changes (dry run)
git apply --check changes.patch
# Apply to working tree
git apply changes.patch
如果使用 format-patch 输出(包含提交元数据):
git am changes.patch
故障排除:
git apply --reject changes.patch— 尽可能应用补丁,并将冲突写入.rej文件git apply -R changes.patch— 撤销先前应用的补丁git apply --3way changes.patch— 启用三方合并以处理冲突
可选:PR 描述
如果用户提出请求,可根据补丁生成拉取请求描述:
# Extract summary of changes
echo "## Summary"
git diff --stat
echo ""
echo "## Changes"
git diff --name-only | while read f; do echo "- \`$f\`"; done
结合对更改内容及原因的简短说明,使其适合作为 GitHub PR 正文。
评论
支持 Markdown