我完全不知道如何删除Git中的松散提交

我完全不知道如何删除Git中的松散提交,git,reset,rebase,revert,Git,Reset,Rebase,Revert,我正在努力学习Git。这是我的 我想删除以下松散提交: e4ab7e8 6d93a36 2a604a9 f31bf0e 我正在还原、重定基址并重置我的Git存储库。但不管我做什么,承诺的历史似乎只会越来越长。有什么帮助吗?理解这一点的关键是Git完全是关于提交的。每个提交都指向一个或多个父提交(除了没有父提交的根提交) 分支只是单个提交的“标签”。每次在此分支上创建新提交时,都会移动此标签。通过遵循提交的父点,Git可以重建历史 分支(记住:标签)也可以手动移动,也可以通过提交以外的其他操作

我正在努力学习Git。这是我的

我想删除以下松散提交:

  • e4ab7e8
  • 6d93a36
  • 2a604a9
  • f31bf0e

我正在还原、重定基址并重置我的Git存储库。但不管我做什么,承诺的历史似乎只会越来越长。有什么帮助吗?

理解这一点的关键是Git完全是关于提交的。每个提交都指向一个或多个父提交(除了没有父提交的根提交)

分支只是单个提交的“标签”。每次在此分支上创建新提交时,都会移动此标签。通过遵循提交的父点,Git可以重建历史

分支(记住:标签)也可以手动移动,也可以通过提交以外的其他操作移动:合并、重置、重设基础等

当提交变得不可访问(有时是“挂起”)时,意味着不再有引用[^1]指向提交。ref通常是分支(=动态标签)或标记(=静态标签)

Git不会立即删除悬空提交,而是将它们留在本地存储库中。这允许你回到以前的状态,以防你搞砸了。分支的旧状态存储在reflog中——正如您所发现的那样。reflog维护所有以前签出的提交的列表

reflog中的条目在给定的时间段后过期。因此,现在确实无法访问提交。Git将在某些情况下(时间、对象数量等)自动运行垃圾收集。当垃圾收集时,真正不可访问的提交也将从存储库中永久删除

TLDR:别担心,它们最终会被移除的


[^1]:缩写为reference

如果提交确实很松散,几天后会自动清理。您可以通过各种方式(垃圾收集等)加快处理速度,但我不推荐这样做。别担心。要快乐。了解什么是git,不要反抗。为什么要删除它们?您运行什么命令以便可以看到它们?如果它们不是任何ref的一部分,Git通常不会显示它们。@knittl我想,你是对的。提交将显示在我的reflog中。这已经帮了我很多忙了。因此,分支似乎是在这些提交被合并或重新设置正确基础之前被删除的。所以现在他们就住在那里。但是我不需要它们的内容,所以我不需要将它们合并到我的主分支中。我应该把它们留在那里吗?