几个月前,我添加了一个发布tarball并将其发布到git代码库。稍后提交了几个提交,我删除了文件并提交了删除。这个文件的大小几乎是整个存储库的10倍,因此.git中存在该文件会大大减慢克隆速度。此时,自添加和删除文件的提交后,已有数百次提交。
有没有办法删除两个取消(添加和删除)的提交,并删除.git中的文件副本,而无需管理存储库?
谢谢..
答案 0 :(得分:1)
您可以执行git rebase
并从历史记录中写出提交 - 但这会改变之后所有提交的ID。没有办法围绕它,这是设计的。
所以说你添加tarball的提交是master~100。如果您在git rebase -i master~101
上执行master
,则会向您显示要仔细阅读和修改的提交列表。您可以简单地取出添加它并将其删除的提交,或者将取消提交移到第一个提交旁边并将其标记为“squash”:这将使git将两者结合起来,并且应该弄清楚结果为空(但如果两者没有精确取消,将会应对,所以这种方法更安全一点。)
答案 1 :(得分:0)
看看git filter-branch。这是重写历史的最佳工具。该手册页有一些很好的例子。
如果其他人使用存储库,请确保他们意识到他们将获得排除其最新提交的主分支。他们现在应该分支到像temp这样的东西并做一个git fetch。
现在他们可以使用Gitk --all来查看分歧的确切位置和rebase,以便与之前提交巨型文件的提交后的提交的SHA-1同步。