我完全不知道如何删除 Git 中的松散提交
I am completely lost in how to delete a loose commit in Git
我正在努力学习Git。这是我的 Git commit history
我想删除以下松散提交:
- e4ab7e8
- 6d93a36
- 2a604a9
- f31bf0e
我正在对我的 Git 存储库进行还原、变基和重置。但无论我做什么,提交历史似乎只会增长。有帮助吗?
理解这一点的关键是 Git 就是提交。每个提交都指向一个或多个父提交(没有父提交的根提交除外)。
分支只是 "labels" 一次提交。每次移动此标签,您都会在此分支上创建一个新的提交。通过跟踪父提交点,Git 可以重建历史记录。
分支(记住:标签)也可以手动移动,也可以通过提交以外的其他操作移动:合并、重置、变基等
当提交变为 无法访问(有时 "dangling")时,这意味着不再有 ref[^1] 指向该提交。 ref 通常是分支(=动态标签)或标签(=静态标签)。
Git 不会立即删除悬空提交,而是将它们留在本地存储库中。这允许您返回到以前的状态,以防您搞砸了。正如您所发现的,您的分支的旧状态存储在 reflog 中。 reflog 维护所有先前签出的提交的列表。
reflog 中的条目在给定时间段后过期。因此,提交现在真的无法访问。 Git 会在特定情况下(时间、对象数量等)自动运行 进行垃圾回收。垃圾收集时,真正无法访问的提交也将从您的存储库中永久删除。
TLDR:别担心,它们最终会被移除。
[^1]:reference
的缩写
我正在努力学习Git。这是我的 Git commit history
我想删除以下松散提交:
- e4ab7e8
- 6d93a36
- 2a604a9
- f31bf0e
我正在对我的 Git 存储库进行还原、变基和重置。但无论我做什么,提交历史似乎只会增长。有帮助吗?
理解这一点的关键是 Git 就是提交。每个提交都指向一个或多个父提交(没有父提交的根提交除外)。
分支只是 "labels" 一次提交。每次移动此标签,您都会在此分支上创建一个新的提交。通过跟踪父提交点,Git 可以重建历史记录。
分支(记住:标签)也可以手动移动,也可以通过提交以外的其他操作移动:合并、重置、变基等
当提交变为 无法访问(有时 "dangling")时,这意味着不再有 ref[^1] 指向该提交。 ref 通常是分支(=动态标签)或标签(=静态标签)。
Git 不会立即删除悬空提交,而是将它们留在本地存储库中。这允许您返回到以前的状态,以防您搞砸了。正如您所发现的,您的分支的旧状态存储在 reflog 中。 reflog 维护所有先前签出的提交的列表。
reflog 中的条目在给定时间段后过期。因此,提交现在真的无法访问。 Git 会在特定情况下(时间、对象数量等)自动运行 进行垃圾回收。垃圾收集时,真正无法访问的提交也将从您的存储库中永久删除。
TLDR:别担心,它们最终会被移除。
[^1]:reference
的缩写