san*_*mai 8 git rebase git-rebase git-rewrite-history
我的Git repo有数百GB的数据,比如SQL备份,所以我试图删除旧的,过时的提交,因为它们会使一切变得越来越大.我需要一个快速的解决方案; 越快越好.
除了最新的提交之外,我如何压缩所有提交,而不必在交互式rebase中手动压缩每个提交?具体来说,我不想使用
git rebase -i --root
Run Code Online (Sandbox Code Playgroud)
我有这些提交:
A .. B .. C ... ... H .. I .. J .. K .. L
Run Code Online (Sandbox Code Playgroud)
我想是这样的(在两者之间挤压的一切A,并H进入A):
A .. H .. I .. J .. K .. L
Run Code Online (Sandbox Code Playgroud)
有关如何压缩所有提交的答案,但我想保留一些最近的提交.我也不想压缩最近的提交.(特别是我需要保持前两个提交从顶部开始计数.)
原贴评论:
如果我们拍摄提交 10004 的快照,删除它之前的所有提交,并使提交 10004 成为根提交,我会没事的
一种方法是在这里,假设您当前的工作称为branchname. 每当我进行大型变基时,我喜欢使用临时标签来仔细检查是否没有更改,并标记一个点,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
Run Code Online (Sandbox Code Playgroud)
要摆脱旧分支,您需要删除其上的所有标签和分支标签;然后
git prune
git gc
Run Code Online (Sandbox Code Playgroud)
将从您的存储库中清除它。
请注意,您将暂时拥有所有内容的两个副本,直到您拥有gc为止,但这是不可避免的;即使您执行标准的压缩和变基,您仍然拥有所有内容的两个副本,直到变基完成。
| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |