为什么需要git gc

时间:2018-10-26 10:09:59

标签: git

据说在git垃圾收集期间,人们会仔细查看提交图并标记它们。

所有未标记的提交都将被删除,这称为GC。

问题是,如何实现未标记的提交?我无法确定此类提交可能如何存在?

1 个答案:

答案 0 :(得分:4)

首先,值得注意的是,您通常不需要运行git gc-git将在某些条件下自行自动运行垃圾收集。 git gc只是迫使它立即发生。

git中的提交是不可变的,这意味着任何似乎更改提交的操作实际上只是在创建一个新的提交。例如,如果您要这样做:

$ git add my-file
$ git commit
$ git add another-file
$ git commit --amend

似乎修改了最后一次提交,但实际上只是创建了一个新提交。

这意味着旧的提交不再被任何东西引用。 git可能会立即摆脱旧的提交,但事实并非如此。当您犯下严重的错误时,这真的很方便,因为您可以找回旧的提交。

另一个可能更改提交的常见操作是rebase。实际上,这是在树中的其他位置创建应用相同更改的新提交,并使旧提交未被引用。

另一种以未引用的提交(也称为悬挂的提交)结束的方法可以被垃圾回收,如果提交仅由标签或分支(例如尚未合并到master的分支)引用,则标签或分支被删除。