我了解到通常情况下,已删除的分支可以被恢复。
我正在寻找一种彻底消除分支的方法。
其中一个开发者在该分支中放置了2GB的资产,这确实是内容,不应该在仓库中。
注意:我尚未将其合并到主分支!
您可以通过使用git filter-branch
轻松实现此操作。例如,假设要删除的文件位于名为content
的目录中:
git filter-branch --tree-filter 'rm -rf content' --prune-empty
filter-branch
方法,因为这不会丢失历史记录。如果filter-branch
看起来太难用,您可以尝试使用BFG Repo-cleaner,它更简单易懂。* The merge commit [master]
|\
| * feature commit [feature]
| |
| * feature commit (the evil one)
. .
. . (some more commits)
. .
|/
*
git checkout master
git reset --hard HEAD^
--squash
选项。这样做时,git不会创建一个通常的合并提交(有多个父级),而是将来自功能分支的所有更改应用,并将您的工作树保留在与“通常”合并发生的状态相同的状态中(请查看文档)。git merge --squash feature
git commit
)。但是,请注意,这样的合并显然没有对合并分支(在本例中为feature)的历史记录进行参考;您应该在提交消息中包含该信息。git branch -D feature
git gc
git gc
只会删除那些没有其他引用指向的功能分支的历史和blob。你需要确保这是正确的情况。
git gc
不仅会删除功能分支的历史记录,还会删除每个dangling object。为了更好地了解其影响和后果,建议阅读progit书籍中的Git Internals - Maintenance and Data Recovery章节。
master
),那么它们也在该分支中。你不能只删除其他分支并期望看到存储库大小缩小。 - Chris