科技 · 实用指南
Git变基跳过提交?重放前先审核补丁
提交哈希被跳过不等于代码丢失。先区分上游等价补丁、重放后为空、手动跳过和GitHub合并限制,再改写历史。

Git报告跳过已应用提交时,先把它的改动与实际变基目标上游比较。默认变基可以省略上游已有的干净挑选补丁,即使提交ID不同。不要只为恢复旧提交数量而加参数重跑。
本指南围绕原始顶点、目标顶点和准确跳过补丁建立证据记录,并区分本地Git行为与GitHub拉取请求按钮。警告本身不能诊断托管平台的合并限制。
记录操作并找回原始顶点
保存完整警告、跳过ID、原始命令、Git版本和目标分支。运行`git status`确认变基是否仍在进行。自动已应用警告、重放后为空提示与手动跳过冲突提交是不同事件;记录实际发生哪一种,不要都叫丢失提交。
变基完成后查看`git reflog show --date=iso YOUR_BRANCH`,把YOUR_BRANCH替换为真实分支名,按操作顺序识别原始顶点。记录准确旧哈希与目标哈希,不要假设固定reflog索引永远指向所需状态。reflog是本地记录且可能过期;原始对象不可用时,停止并寻找其他保留副本。
针对正确上游检查补丁等价
用记录的上游和原始分支顶点运行`git cherry -v UPSTREAM_HASH OLD_TIP_HASH`,两个占位名称替换为已核哈希。减号表示上游存在等价补丁,加号表示未找到。Git文档所述比较忽略空白和行号,不是比提交信息或旧ID。也应阅读准确跳过补丁;标记是等价证据,不证明每项预期结果。
此命令检查已提交补丁,不包含未提交编辑,也不能证明后续提交没有撤销原改动。核对相关文件及预期行为。本站在隔离Git 2.51.1样例中确认:挑选过的功能标为减号、变基时省略,最终文件仍保留;独立未匹配提交也保留。这一有限示例不等于测试了你的仓库。
比较序列,再决定是否重放
已完成操作且基点、顶点明确时,查看`git range-diff OLD_BASE_HASH..OLD_TIP_HASH NEW_BASE_HASH..NEW_TIP_HASH`,将四个占位符替换为真实范围。结合上游补丁比较阅读未匹配和变更条目。新主题范围中缺少的补丁可能已在新基点里;单凭缺少这一条不能认定代码丢失。range-diff是人类阅读的比较输出,不是恢复命令或稳定的机器验收格式。
Git说明`--reapply-cherry-picks`改变的是对干净上游等价补丁的预先省略。重放后提交仍可能变空,由`--empty`控制该阶段。两者都不保证恢复缺少的行为。若确实发现缺失,先保留当前工作并确认希望保留的历史,再恢复;不要以再次变基、硬重置或强推作为诊断步骤。
把GitHub按钮视为独立分支
本地变基成功但GitHub拒绝Rebase and merge时,收集拉取请求基点和顶点哈希、提交数及准确平台提示。当前GitHub仓库限制文档将此方式限定为100个提交。超过上限是可核实的独立条件;未超限也不证明其他合并要求全部满足。没有证据,不要认定本地跳过警告导致平台拒绝。
每项预期改动都应得到说明:已由上游承载、明确决定移除,或仍需审核恢复。检查最终文件与项目必要验证,再依仓库允许的合并策略处理平台限制。给维护者保留新旧顶点、准确命令、跳过ID、补丁比较及未解释的改动。关闭提示或恢复提交数量不是验收。
