【发布时间】:2014-07-31 22:58:23
【问题描述】:
我的 Git 存储库有数百 GB 的数据,例如数据库备份,因此我正在尝试删除旧的、过时的备份,因为它们会使所有内容变得更大、更慢。所以我自然需要快速的东西;越快越好。
我如何压缩(或直接删除)除了最近的提交之外的所有提交,并且这样做不必手动压缩每个interactive rebase 中的一个?具体来说,我不想使用
git rebase -i --root
例如,我有这些提交:
A .. B .. C ... ... H .. I .. J .. K .. L
我想要的是这个(将A 和H 之间的所有内容压缩为A):
A .. H .. I .. J .. K .. L
或者即使这样也可以正常工作:
H .. I .. J .. K .. L
有一个关于如何squash all commits 的答案,但我想保留一些最近的提交。我也不想squash the most recent commits。 (特别是我需要保持前两个提交从顶部开始计数。)
(编辑,几年后。这个问题的正确答案是使用正确的工具来完成这项工作。Git 不是存储备份的好工具,无论它多么方便。There are better tools. )
【问题讨论】:
-
一个 git repo 中有数百 GB?这听起来是个坏主意……
-
你能举一个你会用手做的例子吗?
-
“squash”和“remove”是完全不同的操作; squashing 会保留更改,而删除会丢弃更改(即将您最近的更改重新定位到某个较旧的点)。
-
@MattMcNabb 对,所以改用
kill;我的意思是我不在乎他们会发生什么,我只需要数据;例如如果我们对提交 10004 进行快照,删除之前的所有提交,并将提交 10004 设为根提交,我会没事的 -
@nneonneo 常用的交互式 rebase 东西
标签: git rebase git-rebase git-rewrite-history