用途:在用户要求把 Git 分支 rebase 到另一个 ref、处理 rebase 冲突或验证重写后的历史时使用。
主要能力与流程:先确定当前分支、远程与目标;若用户明确指定目标则保留,否则通过托管元数据或 git ls-remote --symref <remote> HEAD 查询远程默认分支,推导 <remote>/<default-branch>,无法验证则停止,且不信任未刷新的缓存 refs/remotes/<remote>/HEAD。记录当前 HEAD 并检查 git status -sb;遇到 detached HEAD 或脏工作区会停止,而不是自动 stash 或丢弃改动。随后 fetch 并 prune 目标远程,确认目标 ref 存在,用 git merge-base <target> <old-head> 记录旧基点,再执行 git rebase <target>。
冲突处理:用 git diff --name-only --diff-filter=U 列出未解决路径,检查冲突、被重放的提交以及 :1:、:2:、:3: 各阶段;注意 rebase 中 ours 是目标/上游侧,theirs 是被重放的提交;按预期行为解决,而非笼统选边;对删除/修改、重命名、生成文件与二进制文件做显式选择;暂存后 git rebase --continue。若无法安全确定意图,会停在冲突状态并报告所需决策,不自动 abort 或丢弃解决结果。
验证:检查 git status -sb 干净且无 rebase 状态;用 git merge-base --is-ancestor <target> HEAD 验证目标祖先关系;有提交被重放时用 git range-diff <old-base>..<old-head> <target>..HEAD 验证提交等价性;检查变更文件范围并运行最小相关测试。
限制与安全:除非被要求否则不 push;重写已发布历史需单独明确批准 git push --force-with-lease。绝不使用 git reset --hard、git clean、自动 stash 或笼统 ours/theirs 解决;保留无关工作树与用户改动;按仓库说明处理生成文件并在需要时重新生成。交付物包括确切目标与命令、新旧 HEAD、冲突与解决方式、验证结果以及是否需要 force-push。