【发布时间】:2010-10-09 05:00:47
【问题描述】:
似乎我的初始提交占用了 90% 的空间,因为它意外地包含了相当多的媒体文件。有没有办法只从本地和远程存储库中删除第一个提交,还是应该只保留这个?
【问题讨论】:
-
还有
git rebase --root。有关详细信息,请参阅以下 SO 答案:stackoverflow.com/questions/2246208/…
标签: git
似乎我的初始提交占用了 90% 的空间,因为它意外地包含了相当多的媒体文件。有没有办法只从本地和远程存储库中删除第一个提交,还是应该只保留这个?
【问题讨论】:
git rebase --root。有关详细信息,请参阅以下 SO 答案:stackoverflow.com/questions/2246208/…
标签: git
您也可以使用git filter-branch 删除有问题的文件(请参阅示例部分),但它也会重写历史记录。所以任何将他/她的代码建立在你的旧历史之上的人都会大吃一惊......
【讨论】:
听起来您已经与许多其他用户共享了存储库。如果是这种情况,那么您可能应该忍受它。
如果您可以控制所有克隆,那么您可以在已修改的根提交之上重写历史记录,并删除意外文件。请注意,如果其他开发人员已经基于此分支进行了工作,则不应这样做。
如果您想改写历史,那么您可以尝试以下方法。请注意,因为 git 会保留您最近的 HEAD 提交位置的日志(reflogs),所以即使您尝试 git gc 或 @987654322,大型对象也不会立即从您的存储库或其他已经拥有它们的存储库中消失@。但是,它将确保任何新克隆最终都不会获取大对象作为主分支历史记录的一部分。
假设您的工作目录是“干净的”:
# Go back the initial commit
git checkout <SHA1_of_old_root>
# Clean up the index to remove unwanted files, e.g. using git rm <files>
# ...
# Amend the initial commit with the new tree. Note the sha1 of the new commit
git commit --amend
# Go back to the master branch
git checkout master
# Re-apply all the commits onto the new root
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root>
【讨论】: