gpt4 book ai didi

git - 如何通过非交互式压缩除最近的提交之外的所有提交来减小臃肿的 Git 存储库的大小?

转载 作者:太空狗 更新时间:2023-10-29 12:53:58 26 4
gpt4 key购买 nike

我的 Git 存储库有数百 GB 的数据,比方说,数据库备份,所以我试图删除旧的、过时的备份,因为它们使一切变得更大和更慢。所以我自然需要快速的东西;越快越好。

我如何压缩(或简单地删除)除最近的提交之外的所有提交,并且无需手动压缩每个 interactive rebase 中的一个提交?具体来说,我不想使用

git rebase -i --root

例如,我有这些提交:

A .. B .. C ... ... H .. I .. J .. K .. L

我想要的是这个(将 AH 之间的所有内容压缩成 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. )

最佳答案

楼主comments :

if we take a snapshot of a commit 10004, remove all commits before it, and make commit 10004 a root commit, I'll be just fine

此处提供一种方法,假设您当前的工作名为 branchname。每当我做一个大的 rebase 时,我喜欢使用临时标签来仔细检查没有变化,并标记一个点,如果出现问题我可以 reset 返回(不确定这是否是标准的过程与否,但它对我有用):

git tag temp

git checkout 10004
git checkout --orphan new_root
git commit -m "set new root 10004"

git rebase --onto new_root 10004 branchname

git diff temp # verification that it worked with no changes
git tag -d temp
git branch -D new_root

要删除旧分支,您需要删除它上面的所有标签和分支标签;然后

git prune
git gc

将从您的 repo 中清除它。

请注意,您将暂时拥有所有内容的两个副本,直到您进行了gc,但这是不可避免的;即使您执行标准压缩和 rebase ,在 rebase 完成之前,您仍然拥有所有内容的两个副本。

关于git - 如何通过非交互式压缩除最近的提交之外的所有提交来减小臃肿的 Git 存储库的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com