关于 merge-worktree
merge-worktree 用于将已登记的 Git worktree 集成到目标分支,支持本地合并或通过 GitHub PR 集成。它强调明确授权、验证和受控清理。
主要功能
- 01本地合并提交集成
- 02创建及合并 GitHub PR
- 03授权与预检
- 04验证与冲突处理
- 05受控清理 worktree
适用场景
- 01集成已完成的功能 worktree
- 02创建 PR 但不合并
- 03检查通过后合并 PR
- 04安全移除已集成的 worktree
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ legout/ skills --skill merge-worktree安装后在 Claude Code 中输入/merge-worktree确认已加载。
详细介绍
合并工作树
分支收尾安全模式改编自采用 MIT 许可证的
finishing-a-development-branch工作流。确切的固定版本和关联关系记录在sources.json中。
使用合并提交集成一个已注册的 Git 工作树。此技能负责集成和清理工作树;实现工作流必须将任务交接给它,而不是自行合并。
确认授权
根据请求和仓库确定以下输入:
- 源工作树路径和分支;
- 目标分支,以及该工作分支的分叉基点;
- 集成模式:本地或 GitHub PR;
- 对于 PR 模式,操作:仅创建或检查通过后合并;以及
- 清理选项:仅在明确请求
--clean-up时启用,否则在成功集成后询问。
仅在仓库默认分支明确无误时才使用它。如果授权信息不完整,请提供以下选项:本地合并、创建 PR 但不合并、创建 PR 并在检查通过后合并,或保持分支不变。创建 PR 绝不代表获准合并。执行本地合并绝不代表获准推送。
来自 orchestrate-implementation 的候选项交接
当源是编排器候选项时,仅接受由父级拥有且已注册的候选工作树和分支。交接必须列明固定的候选基点/头部、确切的审查范围、已组装的泳道提交、重点验证、候选项审查证据(要求时提供新鲜的独立审查;或在允许的仅低风险工作中提供父级检查),以及授权状态。不得以已删除的工作者路径、目标分支当前的 HEAD 或工作者报告的 SHA 代替候选树。候选项交接不授予推送、合并 PR、部署或发布权限。只要相关内容和环境仍然匹配,可复用交接中的验证证据;但仍须重新验证实际集成提交、引用和制品身份。
预检
- 运行
git worktree list --porcelain。要求源是已注册且未处于分离状态的工作树。 - 确认源分支和目标分支是同一仓库中的不同分支,且没有正在进行的合并、变基或摘取提交操作。
- 要求源分支至少包含一个目标分支无法到达的提交。如果它已经集成,请报告并跳过合并。
- 查找检出目标分支的任何工作树。更新前要求它处于干净状态。
- 检查源差异和提交。发现无关更改、疑似密钥或归属不明确时,停止操作。
- 阅读仓库说明,并从源工作树运行最小范围的相关验证;或者接受已验证的证据,前提是其相关代码、测试、输入和环境仍与确切的源内容匹配;记录复用了哪些证据。
- 如果源包含预期中的未提交更改,仅暂存这些文件并创建简洁的提交。除非收到请求,否则不要修改现有提交。
- 对于 PR 模式,获取所选远程并执行清理;若认证失败,或目标状态存在歧义/分歧,则停止。对于本地模式,仅在用户要求基于远程跟踪目标进行集成时才获取远程。
绝不强制推送,也不要猜测目标分支。
本地集成
在候选合并通过之前,保持目标引用不变:
- 记录当前目标 SHA。
- 在该 SHA 创建临时集成分支和已注册的同级工作树。
- 在集成工作树中,运行
git merge --no-ff <source-branch>,并附上简洁的说明。 - 如果出现冲突,追溯双方的意图,并有针对性地解决每个文件。不要整批选择
ours或theirs。对于冲突的生成文件,使用其所属工具重新生成,而不是手动编辑。 - 运行相关检查——如果集成后的内容与已验证内容相同,且相关输入和环境未变,则可复用仍然适用的已验证证据——并要求集成工作树保持干净且无冲突。务必重新验证实际合并提交、引用和制品身份。
- 确认目标仍等于记录的 SHA。如果目标已变动,则停止,并保留已验证的集成工作树。
- 将目标快进到已验证的集成提交。如果目标已检出,则在该干净工作树中更新它。否则,只有在分支引用的旧值仍与记录的 SHA 一致时,才更新该引用。
- 验证目标现在指向集成提交。
- 使用
git worktree remove移除临时工作树,仅删除已知的临时分支,然后运行git worktree prune。
本地模式下不要推送。集成清理时,绝不使用 rm -rf、强制移除工作树或强制更新。
GitHub PR 集成
在依赖快速变化的语法之前,先运行 gh --help 和相关的 gh pr 帮助。然后:
- 验证
gh auth status、所选 GitHub 远程仓库和当前目标分支。 - 正常推送源分支,并设置上游跟踪。
- 复用该分支上未关闭的 PR,或创建一个以所选分支为目标分支的 PR。根据提交和验证证据拟定标题和正文。
- 报告 PR URL。
对于仅开放 PR,到此为止。不要无限期等待检查,不要合并、启用自动合并或清理源工作树。
对于检查通过后合并,必须先获得明确授权,然后:
- 如果 GitHub 报告存在冲突,则在本地使用
--no-ff将当前目标分支合并到源分支,谨慎解决冲突,重新运行验证,然后正常推送。 - 等待必需的检查。若检查失败或超时,则停止;绝不绕过分支保护。
- 使用仓库允许的合并提交机制合并。如果策略要求使用队列或自动合并,则按该策略操作,不要绕过。
- 验证 PR 已合并,且远程目标分支包含生成的提交,然后再清理。
源工作树清理
仅在本地集成成功或确认 PR 已合并后:
- 若收到明确的
--clean-up请求,则移除源工作树。 - 否则,询问是否移除。
- 验证工作树干净,且其提交可从已集成的目标分支访问。
- 运行
git worktree remove <path>,然后运行git worktree prune。 - 除非另有请求,否则不要删除本地或远程分支。
如果用户要求丢弃工作,先列出分支、路径、未提交文件以及将变得无法访问的提交。删除独有工作前,必须要求用户提供准确确认 discard。绝不要通过强制移除脏工作树来掩盖问题。
报告
报告收到的授权、模式、源、目标、合并提交或 PR URL、运行的检查、是否有内容被推送或在远程合并,以及是否移除了任一工作树。如果停止,则指出未通过的关卡,并保留可恢复状态。