从git历史中删除提交(永远)

时间:2014-09-26 02:02:38

标签: git github revision-history

我想从git存储库的整个历史记录中永久删除指定的提交。我看到了this thread,其中建议使用以下内容:

git reset --hard HEAD~4
git push origin HEAD --force

这很好,并重置我的存储库的状态,但它绝不会删除我的提交。我希望自4个版本以来逐步回滚历史并放弃对回购的更改。

有人可以帮我吗? 当我尝试上面的内容并查看Github中的修订历史记录时,我仍然会看到不需要的提交。

我看到了this article,但在调查此解决方案之前,我想检查是否还有其他选项。

2 个答案:

答案 0 :(得分:1)

从您的问题,运行

时实际发生的事情
git push origin HEAD --force

目前尚不清楚,但我至少可以想到两个可能导致master强制推送到origin的原因:

  1. 当前签出的分支不是 master,并且是origin上已经是最新的分支,或者
  2. 你有一个分离的HEAD
  3. 通过运行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清理后推送本地。