我想从大约两年前从我的GitHub存储库中删除7/8提交。只有2/3的提交会触及任何代码,其余的只是添加和删除配置文件。
以前的一些开发人员按字面意思上传和删除了> 650个重复的配置文件,它搞砸了我们的github统计页面。 Stat Graph
我们尝试使用git rebase -i删除它们,但是花了6个小时,大部分代码都没了。
如何在不搞乱其他提交历史的情况下删除这些古老的提交? 我们当前正在重新编码存储库中的所有代码,因此如果不保留来自这些单独提交的更改,这不是什么大问题,但我们希望保留除此之外的旧代码的所有统计信息。
答案 0 :(得分:0)
需要两个步骤:
git rebase --interactive good-commit-sha
git filter-branch --tree-filter' rm -f config-files' HEAD
git push --force origin master
请注意,强烈建议不要使用推力,因为它会使您回购的所有当前克隆不一致。任何冲突都必须手动修复。
答案 1 :(得分:0)
强制性危险:重写项目历史是非常危险的!在尝试此操作之前,请确保您有备份,并且要格外小心!
要删除项目中的一个特定提交(例如,从多年前开始),您可以:
git rebase -p --onto SHA^ SHA
SHA
是您要删除的提交。
这些选项的文档是:
-p, --preserve-merges
Recreate merge commits instead of flattening the history by replaying
commits a merge commit introduces. Merge conflict resolutions or
manual amendments to merge commits are not preserved.
--onto <newbase>
Starting point at which to create the new commits. If the --onto
option is not specified, the starting point is <upstream>. May
be any valid commit, and not just an existing branch name.
进行此更改后,您需要:
git push --force origin master
# ^^^^^^^
# !!!