如何截断或减少 GitHub 上的 git 回购
How to truncate or reduce a git repo that's on GitHub
我知道这个问题有各种各样的排列组合,但我无法找到任何解决我的具体问题的方法。事情是这样的:
我在 GitHub 上托管了一个存储库。它是两个远程仓库的来源——一个是我的开发机器,另一个是服务器。我犯了一个愚蠢的错误,并让一个脚本在大约一年半的时间里提交了增量用户数据库备份。所以现在我有大约 200mb 的文件和另外 1Gb 的增量数据库更改提交到我的 git 存储库(是的,我吸取了教训)。从视觉上看,它看起来像这样,其中 "C" 表示 legitimate 代码更改,"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<foo@bar.com>
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 步之后,请确保您的 master 分支上的所有内容都符合您的喜好。然后删除那个备份分支,然后去修剪。
简而言之:
- 不要将分支视为一整行提交,而是将分支视为结束提示,这有助于保持通往它的链条。
- 一旦这些链成员变得未被引用,它们就会被垃圾回收。**
我知道这个问题有各种各样的排列组合,但我无法找到任何解决我的具体问题的方法。事情是这样的:
我在 GitHub 上托管了一个存储库。它是两个远程仓库的来源——一个是我的开发机器,另一个是服务器。我犯了一个愚蠢的错误,并让一个脚本在大约一年半的时间里提交了增量用户数据库备份。所以现在我有大约 200mb 的文件和另外 1Gb 的增量数据库更改提交到我的 git 存储库(是的,我吸取了教训)。从视觉上看,它看起来像这样,其中 "C" 表示 legitimate 代码更改,"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<foo@bar.com> 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 步之后,请确保您的 master 分支上的所有内容都符合您的喜好。然后删除那个备份分支,然后去修剪。
简而言之:
- 不要将分支视为一整行提交,而是将分支视为结束提示,这有助于保持通往它的链条。
- 一旦这些链成员变得未被引用,它们就会被垃圾回收。**