关于 git:compare-worktrees
这是一个比较 Git worktree 中文件或目录差异的命令,可按路径或分支选择比较对象,也能输出差异统计。适用于检查功能分支变更、比较实现和合并前审查。
主要功能
- 01列出并选择 worktree
- 02比较文件或目录差异
- 03按分支查找比较对象
- 04输出变更统计
- 05处理二进制文件与权限差异
适用场景
- 01审查功能分支变更
- 02比较不同分支的实现
- 03合并前检查源代码和测试
- 04快速确认指定文件差异
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ neolabhq/ context-engineering-kit --skill git:compare-worktrees安装后在 Claude Code 中输入/git:compare-worktrees确认已加载。
详细介绍
Claude 命令:比较工作树
你的任务是比较不同 Git 工作树之间的文件和目录,帮助用户了解不同分支或工作树中的代码差异。
说明
重要:请严格按以下步骤执行:
-
检查当前状态:运行
git worktree list,显示所有现有工作树及其位置 -
解析用户输入:对提供的每个参数进行分类:
- 无参数:交互模式——询问用户要比较什么
--stat:显示差异统计摘要(已更改文件、插入、删除)- 工作树路径:与
git worktree list中某个工作树根目录匹配的路径 - 分支名称:与某个工作树中的分支匹配的名称
- 文件/目录路径:当前工作树内要比较的路径
-
确定比较目标(要比较的工作树): a. 如果用户提供了工作树路径:将这些路径作为比较目标 b. 如果用户指定了分支名称:从
git worktree list中查找这些分支对应的工作树 c. 如果除当前工作树外只有一个工作树:将当前工作树和该工作树作为比较目标 d. 如果有多个工作树且未指定目标:列出工作树并询问用户要比较哪些 e. 如果没有其他工作树:提出使用git diff与某个分支进行比较 -
确定比较内容(工作树内的文件/目录): a. 如果用户指定了文件或目录路径:比较所有这些路径 b. 如果没有指定路径:询问用户:
- “比较整个工作树?”或
- “比较特定文件/目录?(输入路径)”
-
执行比较:
比较工作树之间的特定文件:
diff <worktree1>/<path> <worktree2>/<path> # Or for unified diff format: diff -u <worktree1>/<path> <worktree2>/<path>比较工作树之间的目录:
diff -r <worktree1>/<directory> <worktree2>/<directory> # Or for summary only: diff -rq <worktree1>/<directory> <worktree2>/<directory>分支级比较(使用 git diff):
git diff <branch1>..<branch2> -- <path> # Or for stat summary: git diff --stat <branch1>..<branch2>与当前工作目录比较:
diff <current-file> <other-worktree>/<file> -
整理并展示结果:
- 显示清晰的标题,说明比较内容
- 对于较大的差异,先询问是否展示摘要
- 突出显示重要更改(新建文件、删除文件、重命名文件)
- 提供各工作树所含分支的相关信息
比较模式
| 模式 | 说明 | 命令模式 |
|---|---|---|
| 文件差异 | 比较工作树之间的单个文件 | diff -u <wt1>/file <wt2>/file |
| 目录差异 | 递归比较目录 | diff -r <wt1>/dir <wt2>/dir |
| 仅摘要 | 显示存在差异的文件(不显示内容) | diff -rq <wt1>/ <wt2>/ |
| Git diff | 使用 Git 的 diff(基于分支) | git diff branch1..branch2 -- path |
| 统计视图 | 显示更改统计信息 | git diff --stat branch1..branch2 |
工作树检测
此命令使用 git worktree list 查找工作树:
/home/user/project abc1234 [main]
/home/user/project-feature def5678 [feature-x]
/home/user/project-hotfix ghi9012 [hotfix-123]
此命令从输出中提取:
- 路径:工作树目录的绝对路径
- 分支:方括号中的分支名称(用户指定分支名称时使用)
示例
比较工作树之间的特定文件:
> /git:compare-worktrees src/app.js
# Prompts to select which worktree to compare with
# Shows diff of src/app.js between current and selected worktree
比较两个指定的工作树:
> /git:compare-worktrees ../project-main ../project-feature src/module.js
# Compares src/module.js between the two specified worktrees
比较多个文件/目录:
> /git:compare-worktrees src/app.js src/utils/ package.json
# Shows diffs for all three paths between worktrees
比较整个目录:
> /git:compare-worktrees src/
# Shows all differences in src/ directory between worktrees
获取统计摘要:
> /git:compare-worktrees --stat
# Shows which files differ and line counts
交互模式:
> /git:compare-worktrees
# Lists available worktrees
# Asks which to compare
# Asks for specific paths or entire worktree
按分支名称与分支工作树比较:
> /git:compare-worktrees feature-x
# Finds worktree for feature-x branch and compares
比较分支工作树之间的指定路径:
> /git:compare-worktrees main feature-x src/ tests/
# Compares src/ and tests/ directories between main and feature-x worktrees
输出格式
文件比较标题:
Comparing: src/app.js
From: /home/user/project (main)
To: /home/user/project-feature (feature-x)
---
[diff output]
摘要输出:
Worktree Comparison Summary
===========================
From: /home/user/project (main)
To: /home/user/project-feature (feature-x)
Files only in main:
- src/deprecated.js
Files only in feature-x:
+ src/new-feature.js
+ src/new-feature.test.js
Files that differ:
~ src/app.js
~ src/utils/helpers.js
~ package.json
Statistics:
3 files changed
2 files added
1 file removed
常见工作流
审查功能更改
# See what changed in a feature branch
> /git:compare-worktrees --stat
> /git:compare-worktrees src/components/
比较实现方案
# Compare how two features implemented similar functionality
> /git:compare-worktrees ../project-feature-1 ../project-feature-2 src/auth/
快速检查文件
# Check if a specific file differs
> /git:compare-worktrees package.json
合并前审查
# Review all changes before merging (compare src and tests together)
> /git:compare-worktrees --stat
> /git:compare-worktrees src/ tests/
# Both src/ and tests/ directories will be compared
重要说明
-
参数检测:命令会通过与
git worktree list的输出进行比对,自动检测参数类型:- 与工作树根目录匹配的路径 → 视为要比较的工作树
- 与工作树中分支匹配的名称 → 视为要比较的工作树
- 其他路径 → 视为要在工作树中比较的文件/目录
-
多个路径:提供多个文件/目录路径时,所选工作树之间会比较所有路径(而不只是第一个路径)。
-
工作树路径:指定工作树时,请使用完整路径或相对于当前目录的路径(例如
../project-feature) -
分支与工作树:如果指定分支名称,命令会查找检出该分支的工作树。如果该分支不存在对应的工作树,命令会建议改用
git diff。 -
大型差异:对于大型目录,命令会在显示完整差异输出前,询问是否先显示摘要。
-
二进制文件:检测到二进制文件时,会报告“Binary files differ”,而不会显示实际差异。
-
文件权限:如果文件权限不同,差异中也会显示权限变更。
-
没有工作树:如果不存在其他工作树,命令会说明如何创建工作树,并建议改用
git diff比较分支。
与 Create Worktree 集成
先使用 /git:create-worktree 设置用于比较的工作树:
# Create worktrees for comparison
> /git:create-worktree feature-x, main
# Created: ../project-feature-x and ../project-main
# Now compare
> /git:compare-worktrees src/
故障排除
“未找到其他工作树”
- 先使用
/git:create-worktree <branch>创建工作树 - 或使用
git diff在不借助工作树的情况下仅比较分支
“未找到该分支的工作树”
- 该分支可能尚未创建工作树
- 运行
git worktree list查看可用工作树 - 使用
/git:create-worktree <branch>创建工作树
“工作树中不存在该路径”
- 指定的文件/目录可能不存在于某个工作树中
- 这可能表示该文件在某个分支中被添加或删除
- 命令会在比较输出中报告此情况