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
相关产品推荐
相关产品推荐

