【发布时间】:2017-10-12 14:39:15
【问题描述】:
根据an answer of “How often should you use git-gc?”,每次推送到远程时git gc都会自动运行。
我评论了答案,但没有得到回应,所以我在这里问。
我的树中有无法访问的提交(由于
git commit --amend)。这可以通过git log --reflog进行验证。我将一个分支推送到远程存储库并再次检查了我的树;无法访问的提交仍然存在。显然git gc在此推送发生时没有运行。 ……?
例子:
$ git commit -m 'commit A'
$ git commit -m 'commit B'
$ git commit -m 'commit C'
$ git commit --amend -m 'commit D'
$ git commit -m 'commit E'
$ git commit -m 'commit F'
$ git push origin master
$ git log --reflog
* commit F (HEAD -> master, origin/master)
* commit E
* commit D (an amendment of C)
|
| * commit C
|/
* commit B
* commit A
当我将 master 推送到远程并运行 git log --reflog 时,commit C 仍然可见。即使提交 C 超过 30 天,情况仍然如此。我认为git push 自动运行git gc,我认为git gc 删除了无法访问的提交(在本例中为C)。我错过了什么吗?
【问题讨论】:
-
您希望提交从哪个仓库消失?
git push将执行git gc远程仓库。 -
你也可以在这里遇到 heisenbug 问题:我相信 reflog 本身可以代表对提交的引用。