提问人:kael 提问时间:1/22/2015 更新时间:11/2/2017 访问量:4095
如何截断或减少 GitHub 上的 git 存储库
How to truncate or reduce a git repo that's on GitHub
问:
我知道这个问题的各种排列方式都在流传,但我无法发现任何解决我特定问题的东西。事情是这样的:
我在 GitHub 上托管了一个存储库。它是两个远程存储库的源 - 一个是我的开发计算机,另一个是服务器。我犯了一个愚蠢的错误,让一个脚本在一年半的时间里提交了增量用户数据库备份。所以现在我在我的 git 存储库中提交了大约 200mb 的文件和另外 1Gb 的增量数据库更改(是的,我吸取了教训)。从视觉上看,它看起来像这样,其中“C”表示合法的代码更改,“DB”表示它是仅包含不重要的数据库备份的提交:
C1--C2--C3--C4--DB--DB--DB--DB--DB--DB--DB--DB...(1.5 years)...DB--DB...
我想做的是:
/--DB--DB--DB--DB--DB...<--(throw all this away forever)
/
C1--C2--C3--C4--//<--REVERT TO THIS POINT --C5--C6--C7....
我基本上会创建一个包含所有这些愚蠢的数据库提交的分支,将我的存储库备份到分支离开的点,然后删除该分支。关于如何做到这一点的任何想法?理想情况下,我不必创建新的 GitHub 存储库,但我会接受任何性质的建议。
答:
找到要返回的提交:
$ git log --before="2015-12-01" -n1 commit de4406f26ce506944b2b629890bba9e091468e05 Author: some Author<[email protected]> Date: Mon Nov 30 10:46:21 2015 +0100
重置指向它的(本地)存储库指针:
git reset --hard <commit-hash>
force² 将其推送到您的服务器(²,因为您必须覆盖历史记录)
git push -f origin master
后续的数据库提交将在下次进行修剪,或者您立即进行修剪(修剪对您已经实现的、所需的清理没有影响。这只是为了真正摆脱那些未引用的东西)
git prune
.
如果你想安全起见,我建议
- 您可以在第 1 步之前创建一个名为分支的分支(无需签出,只是为了指向您的旧提示!
backup
- 在步骤 3 之后,请确保主分支上的所有内容都符合您的喜好。然后删除该备份分支,然后进行修剪。
总之:
- 不要将分支视为一整条提交线,而是将其视为结束提示,从而保持通向它的链的活力,这很有帮助。
- 这些链成员一旦失去引用,就会被垃圾回收。
评论
DB