我想从git存储库的整个历史记录中永久删除指定的提交。我看到了this thread,其中建议使用以下内容:
git reset --hard HEAD~4
git push origin HEAD --force
这很好,并重置我的存储库的状态,但它绝不会删除我的提交。我希望自4个版本以来逐步回滚历史并放弃对回购的更改。
有人可以帮我吗? 当我尝试上面的内容并查看Github中的修订历史记录时,我仍然会看到不需要的提交。
我看到了this article,但在调查此解决方案之前,我想检查是否还有其他选项。
答案 0 :(得分:1)
从您的问题,运行
时实际发生的事情git push origin HEAD --force
目前尚不清楚,但我至少可以想到两个可能导致master
强制推送到origin
的原因:
master
,并且是origin
上已经是最新的分支,或者HEAD
。通过运行master
,确保git checkout master
确实是当前已检查的分支。然后运行你的force push命令。或者,在master
命令中明确指定git push
:
git push --force origin master
应该这样做。
答案 1 :(得分:1)
如果分支或标记(即称为“松散对象”)不再引用不需要的提交,则垃圾收集器将自动删除它们。默认情况下,GC会对超过90天的对象执行操作。
您仍然可以使用以下方法手动触发早期GC:
git reflog expire --expire=now --all
git gc --prune=all
但是,这只会在您的本地存储库上运行,而不会在GitHub上运行。 GitHub使用自己的选项运行每周GC,因此如果要删除提交现在,则必须删除存储库,重新创建它并在GC清理后推送本地。