当我读到git 变基,我明白重新定位的提交应该丢失。我说应该是因为我注意到,知道重新调整的提交 sha,我可以回忆起来。
假设我有以下三个提交
A -> B -> C
where C
的啥是cshaid
。然后,如果我交互地变基fixing-up
C
into B
with git rebase -i HEAD~2
然后我检查结果git log
,我得到了预期的结果,意思是
A -> B'
where B'
的 sha 不同于B
's sha.
然而,运行git log cshaid
再次显示
A -> B -> C
问题: 这是已知的行为吗?我尝试阅读git rebase --help
但找不到相关信息。为什么重新定位的提交不会被简单地忘记?我的意思是,只有当您知道自己在做什么并且可以做到时,才执行变基是一种危险的操作,这就是拥有脏索引(或保留这些无用提交的地方)的意义所在?我错过了什么吗?
重现步骤(并更好地理解我的疑虑)。如果您愿意重现这种情况,请尝试:
mkdir sampledir && cd sampledir && git init
touch file && git add -A . && git commit -m "Initial"
- 编辑文件,然后
git commit -am "First modification"
- 编辑文件,然后
git commit -am "Second modification"
-
git log
,你会看到三个提交,记住 shaSecond modification
-
git rebase -i HEAD~2
, the fixup
Second modification
into First modification
-
git log
,您将看到两个提交,其中 sha 为First modification
现在与步骤 5 中的不同
- 然而,
git log sha-for-"Second modification"
将显示与此列表中的点 5 完全相同的树
是的,这是预期的行为。未引用的提交最终将被垃圾收集,从而从磁盘中清除。它们会保留很多天(默认为 14 天),但在 14 天计时器开始计时之前,对象也必须已从引用日志中过期(默认情况下,无法访问的对象会在 30 天后过期)。
相关 StackOverflow 问题:
- git reflog 过期和 git fsck --unreachable
- 列出和删除不在分支下的 Git 提交(悬空?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)