1

我想从 git 存储库的整个历史记录中永久删除指定的提交。我看到了这个帖子,其中推荐以下内容:

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

这很好,并重置了我的存储库的状态,但它绝不会删除我的提交。我想从字面上回滚历史并放弃自 4 次修订以来对 repo 的更改。

谁能帮我解决这个问题?当我尝试上述方法并查看 Github 中的修订历史记录时,我仍然会看到不需要的提交。

我看到了这篇文章,但我想在调查此解决方案之前检查是否有其他选项。

4

2 回答 2

1

根据您的问题,您跑步时实际发生了什么

git push origin HEAD --force

尚不清楚,但我至少可以想到两个可能无法强制推送master的原因origin

  1. 当前签出的分支不是 master并且是已经是最新的分支origin,或者
  2. 你有一个超然的HEAD

通过运行确保master确实是当前已签出的分支git checkout master;然后运行你的强制推送命令。或者,mastergit push命令中明确指定:

git push --force origin master

那应该这样做。

于 2014-09-26T08:15:26.597 回答
1

如果不需要的提交不再被分支或标签引用(即称为“松散对象”),那么它们将被垃圾收集器自动删除。默认情况下,GC 作用于超过 90 天的对象。

您仍然可以通过以下方式手动触发较早的 GC:

git reflog expire --expire=now --all
git gc --prune=all

但是,这只会在您的本地存储库上起作用,而不是在 GitHub 上。GitHub 每周运行一次 GC 并有自己的选项,因此如果您想立即删除提交则必须删除存储库,重新创建它并在 GC 清理后推送您的本地。

于 2014-09-26T13:29:51.013 回答