从Git中删除过时的提交记录

3

我已经进行了一些测试提交(以测试提交钩子),并始终将索引重置为我的上一个正常提交。现在这些过期的提交仍然存在:

> git reflog
fcdabf7 HEAD@{0}: reset: moving to fcdabf7e01845d6f000fc3cef2edc999c57a7e29
5c97564 HEAD@{1}: commit: t
fcdabf7 HEAD@{2}: reset: moving to fcdabf7e01845d6f000fc3cef2edc999c57a7e29
ae52246 HEAD@{3}: commit: t
fcdabf7 HEAD@{4}: reset: moving to fcdabf7e01845d6f000fc3cef2edc999c57a7e29
c58aeef HEAD@{5}: commit: t
fcdabf7 HEAD@{6}: reset: moving to fcdabf7e01845d6f000fc3cef2edc999c57a7e29
3a2cc3b HEAD@{7}: commit: test

我该如何移除它们?从技术角度来看:如果我不管它们,那么当我执行推送操作时它们会被推送到上游仓库吗?

2
据我所知,你只会推送通过你所推送的分支可达到的提交。如果在git log中找不到它,那就没有被推送。另外,尝试使用git gc清除无法访问的提交。 - ZeissS
我尝试了git gc --aggressive --prune=2015-01-01,但是它没有从reflog中删除它们。 - AndiDog
请参考以下链接:https://dev59.com/TXI-5IYBdhLWcg3wVW3v - CharlesB
2个回答

1

引用日志条目所引用的提交本身并不是悬空的。要清除引用日志,

git reflog expire --expire=0 --all

之后可以使用git prune命令来删除现在已经变成悬空的提交。

那个方法有效,git gc --aggressive --prune=now 删除了提交记录。当然,这意味着每次这样做我都会丢失 reflog。 - AndiDog

1

首先,您不必担心悬挂提交会进入远程存储库。它们不会被推送,并且通常会在适当的时候进行清理。

但是,如果您想清除这样的悬挂对象,请尝试运行:

git gc --prune=now

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接