用途:将当前分支 rebase(变基)到用户显式指定的源分支,并以安全兜底为前提处理这一不可逆的改写历史操作。
主要能力与硬性规则:一是必建备份分支,rebase 前执行 git branch "backup/${CUR}-$(date +%Y%m%d-%H%M%S)",作为唯一撤销退路;二是必用源分支远端最新版,rebase 前先 git fetch,再 git rebase "origin/$SRC",不用本地陈旧副本;三是冲突拿不准必须停下,用 AskUserQuestion 让用户裁决,不自主猜选。
使用方式:源分支必须显式指定,缺省不代入 main/master;要求工作区干净(脏则先 commit 或 stash)。然后建备份、fetch 并执行 rebase,进入冲突循环。冲突判定中注意 rebase 下 --ours/--theirs 与 merge 方向相反:仅当前分支动过的文件以当前为准,用 git checkout --theirs <file>;仅源分支动过的以源分支为准,用 git checkout --ours <file>;两边都实质改同一逻辑则停止询问。解决后 git add 并 git rebase --continue,add 前用 git diff --check 确认无残留冲突标记。完成后查看 git log --oneline -5,已推远端的分支需 git push --force-with-lease,禁用裸 --force。
失败兜底:建备份失败则停止,不进 rebase;用户也不确定冲突时 git rebase --abort 并保留备份;--continue 报 no changes 可用 git rebase --skip;中途放弃用 git rebase --abort,异常则 git reset --hard 到备份;已 rebase 完才发现选错可回退备份或 git reflog。
适用场景与限制:适合需要把当前分支安全变基到指定源分支的本地与协作仓库。它是半自动而非全自动,只有单边改动可机器判定,语义冲突须人工;备份只护本地历史,已推远端且被他人共享的分支变基后仍需 --force-with-lease 推送,可能影响协作者;不处理 rebase -i 交互式操作;实质改动判定基于提交历史,极端场景可能误判并落入拿不准分支。