mcpField
R
rebaseplan

rebaseplan

本地服务
github.com/CloudCorpRecords版本控制01 周前更新

关于 rebaseplan

rebaseplan 是面向准备执行 Git rebase 的开发者的命令行工具和 MCP 服务。它分析提供的提交历史与上游状态,给出策略、风险提示和操作步骤,但不会修改仓库。

主要功能

  1. 01推荐 rebase 策略
  2. 02检测合并提交与 squash 标记
  3. 03评估已发布历史的风险
  4. 04生成有序 rebase 与推送步骤
  5. 05按路径报告输入错误

适用场景

  1. 01改写历史前评估分支
  2. 02为合并或 squash 提交选择策略
  3. 03规划已发布分支的安全推送

MCP 相关

MCP 服务提供 `plan_rebase` 工具,接收分支提交、可选的上游提交和发布状态,并返回包含警告的 rebase 计划。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-rebaseplan": {
"command": "npx",
"args": [
"-y",
"@reneturcios/rebaseplan"
]
}
}
}
启动命令npx -y @reneturcios/rebaseplan

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/rebaseplan0.1.0
ocighcr.io/cloudcorprecords/rebaseplan:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
commitsarray是该分支自身的提交,按从旧到新排列:{hash, subject, merge}
publishedboolean否该分支是否已推送或共享(可选)
upstream_commitsarray否上游分支中存在、但该分支中没有的提交(可选):{hash, subject}

详细介绍

rebaseplan

对分支进行变基很容易开始,却很难撤销,尤其是其他人已经基于旧历史开展工作时。风险往往不会体现在分支名称中:普通变基会压平的合并提交、原始提交可能也存在于上游的 squash 合并标记、大幅领先的上游,以及改写后会被弃置的已发布历史。rebaseplan 会在你开始前读取这些情况,并返回计划,而不是让你措手不及。

你需要提供该分支自己的提交,按从旧到新的顺序排列,每个提交包含哈希、主题,以及可选的合并提交标记。你也可以提供上游分支有而该分支没有的提交,并说明该分支是否已推送或共享。工具不会获取、变基或推送任何内容——它只进行统计并提供建议。

提交只有在以下两种情况下才会被计为 squash 标记:主题以 Squashed commit 开头,或以类似 (#123) 的 GitHub squash 合并后缀结尾——固定测试使用正则表达式 /\(#\d+\)$/。无论上游提交的主题是什么,它们都不会被计为标记。

强制推送风险遵循固定表格。未发布的分支风险为 low。已发布且没有合并提交和 squash 标记的分支风险为 medium。已发布且包含其中任意一种的分支风险为 high。

推荐策略按首次匹配项确定:存在任何合并提交时,使用 rebase_with_merge_preservation;否则,存在任何 squash 标记时,使用 interactive_squash_cleanup;否则,使用 linear_rebase。因此,两者同时存在时,合并历史优先于 squash 标记。

计划的步骤始终以获取上游开始,并以在变基后的 HEAD 上运行测试套件及推送说明结束:对于已发布的分支,先创建备份分支,再使用 --force-with-lease,绝不使用普通的 --force;对于从未发布的分支,则使用普通推送。警告按顺序指出合并提交、squash 标记、上游领先至少 10 个提交(无论具体数量是多少,警告文本都固定),以及已发布历史改写。

格式错误的输入——缺失、为空或非数组的 commits,缺失、为空或类型不是字符串的 hash 或 subject,类型不是布尔值的 merge,类型错误的 upstream_commits 条目,或类型不是布尔值的 published——会导致验证错误,并指出出错路径,不返回任何部分结果。未知的额外字段会被忽略。

CLI

npx @reneturcios/rebaseplan plan --input args.json
npx @reneturcios/rebaseplan --version

args.json 包含完整的参数对象:

{
  "commits": [
    { "hash": "a1b2c3", "subject": "Add login form" },
    { "hash": "d4e5f6", "subject": "Merge branch 'main'", "merge": true }
  ],
  "upstream_commits": [
    { "hash": "f7a8b9", "subject": "Bump dependencies" }
  ],
  "published": true
}

upstream_commits 默认为 [],published 默认为 false,每个提交的 merge 默认为 false。结果以 JSON 格式输出:

{
  "commit_count": 2,
  "merge_commits": 1,
  "squash_markers": 0,
  "upstream_new_commits": 1,
  "published": true,
  "force_push_risk": "high",
  "recommended_strategy": "rebase_with_merge_preservation",
  "steps": [
    "fetch upstream before planning the final rebase",
    "create a backup branch pointing at the current head",
    "rebase onto upstream preserving merge commits",
    "run the test suite on the rebased head",
    "push with --force-with-lease, never plain --force"
  ],
  "warnings": [
    "history contains merge commits; a plain rebase will flatten them",
    "branch is published; rewriting it rewrites history others may have based work on"
  ]
}

退出代码:成功时为 0,发生运行时错误(包括输入文件无法读取或无效,以及输入无效)时为 1,用法错误时为 2。

MCP 服务

npx -y @reneturcios/rebaseplan mcp

MCP 客户端配置:

{
  "mcpServers": {
    "rebaseplan": {
      "command": "npx",
      "args": ["-y", "@reneturcios/rebaseplan", "mcp"]
    }
  }
}
工具
  • plan_rebase — 在开始前规划安全的变基。

    • commits(数组,必填,不能为空)——该分支自己的提交,按从旧到新的顺序排列:{hash, subject, merge}
    • upstream_commits(数组,可选,默认为 [])——上游分支有而该分支没有的提交: {hash, subject}
    • published(布尔值,可选,默认为 false)——该分支是否已推送或共享

    返回 {commit_count, merge_commits, squash_markers, upstream_new_commits, published, force_push_risk, recommended_strategy, steps, warnings}。

Docker

docker run -i ghcr.io/cloudcorprecords/rebaseplan
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/rebaseplan plan --input /w/args.json

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

许可证

MIT — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。