You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git变基及删除过时分支会丢失提交数据吗?附Git Pro示例疑问

Git Rebase: What Happens to Original Commits Like C3, C4, C10?

Great question—this is a super common point of confusion when working with rebases, especially after deleting the original branches. Let’s break it down clearly:

  • 原始提交并没有立刻消失:C3、C4、C10 仍存在于 Git 的对象数据库中,变基操作完成后它们不会马上被删除。唯一的变化是,由于你删除了 client 和 server 分支,这些提交不再被任何分支或标签引用。Git 称这类提交为「悬空提交」——它们仍在数据库里,但不会出现在你可见的提交历史中。

  • 你仍能检索到它们……一段时间内:

    • 如果你记得这些提交的完整或部分哈希值,可以直接用 git show <commit-hash> 查看提交内容,或者用 git checkout <commit-hash> 切换到该提交的状态。
    • Git 会记录 HEAD 的每一次变更(包括变基前后的状态),这些记录保存在 reflog 里。运行 git reflog,你会看到变基前仓库状态的条目,比如类似 HEAD@{n}: rebase: checkout <original-branch> 的行,对应的提交哈希就能帮你找回原始的 C3/C4/C10 提交链。
    • 你还可以查看 ORIG_HEAD 引用——Git 在变基这类操作前会自动将它设置为 HEAD 的上一个状态。运行 git show ORIG_HEAD,可能会显示变基前原始分支的最新提交(比如 C4 或 C10)。
  • 如果一直无人引用,它们最终会被删除:Git 的垃圾回收器(git gc)会在后台自动运行(也可以手动用 git gc 触发),清理一段时间内未被引用的对象(默认是 30 天)。一旦垃圾回收器清理了这些悬空提交,它们就彻底消失了——除非你有备份(比如仍保留原始分支的远程仓库,或者变基前创建的本地克隆)。

  • 关键区别要注意:虽然 C3/C4/C10 的变更已经以 C3'/C4'/C10' 的形式出现在 master 分支上,但原始提交是独立的对象。变基会创建内容相同但父指针和哈希不同的新提交——所以原始提交并没有被合并到新历史里,只是在可见分支中被替代了而已。

内容的提问来源于stack exchange,提问作者Geeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:54