能否从 Git 仓库中删除初始提交?

15

看起来我的初始提交占用了90%的空间,因为意外地包含了很多媒体文件。有没有办法只从本地和远程仓库中删除第一个提交,还是应该让它保留?


1
还有git rebase --root。有关详细信息,请参见以下SO答案:https://dev59.com/pXE95IYBdhLWcg3wlu6z - MKroehnert
2个回答

25

看起来你已经将存储库共享给许多其他用户了。如果是这种情况,那么你应该只是忍受它。

如果你控制所有的克隆版本,则可以在修改后的根提交上重写历史记录,以删除不需要的文件。请注意,如果其他开发人员已经基于此分支进行工作,则不应执行此操作。

如果你想要重写历史记录,可以尝试以下操作。请注意,因为Git会保留您的HEAD提交最近所在位置的日志(reflogs),即使您尝试使用git gcgit gc --prune,大型对象也不会立即从您的存储库或已拥有它们的其他存储库中消失。但是,这将确保任何新的克隆版本不会作为主分支的历史记录的一部分获取大型对象。

假设您的工作目录是'clean':

# 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>

2

或者您可以使用git filter-branch来删除有问题的文件(请参见 EXAMPLES 部分),但这也会重写历史记录。因此,任何基于旧历史记录的代码的人都将受到不良影响...


1
filter-branch如果自根提交以来对不需要的文件进行了跟踪,它也会更好地处理(或者至少需要更少的交互)。 - CB Bailey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接