假设我们有分支:
A <-- B <-- C
进一步假设我们git commit --amend用来更改C为C':
A <-- B <-- C'
问题:(C从字面上讲)会发生什么?该提交是否仍然存在于 git 的对象存储中(它只是悬挂在我们的主分支上)?
是的,它存在,如果你知道它的 sha,你可以做
git show <SHA>
Run Code Online (Sandbox Code Playgroud)
看见了。
它只是保持“孤儿”,最终被垃圾收集器修剪。
最终的情况是
A -- B -- C'
\
\-- C (this commit is unreachable, so it's not shown in normal git logs)
Run Code Online (Sandbox Code Playgroud)
关于垃圾收集器,又名 git gc
在当前存储库中运行许多内务管理任务,例如压缩文件修订版(以减少磁盘空间并提高性能)并删除可能已从先前的 git add 调用中创建的无法访问的对象。
鼓励用户在每个存储库中定期运行此任务,以保持良好的磁盘空间利用率和良好的操作性能。
一些 git 命令可能会自动运行 git gc;有关详细信息,请参阅下面的 --auto 标志。如果您知道自己在做什么并且只想永久禁用此行为而无需进一步考虑,请执行以下操作:
git config --global gc.auto 0