删除Github提交历史记录

31

有没有办法删除我的 Github 提交历史记录?我不想删除所有的提交记录,只想删除最后10个或更少的提交记录。但我似乎无法找到如何做到这一点。


4
请参考https://dev59.com/D3RB5IYBdhLWcg3w1Kr0。请注意,如果有其他人在同一仓库上协作,则执行此类操作是不明智的。通常最好解决历史记录中的问题并继续前进。 - John Flatness
4个回答

62

只需选择您想要返回的哈希值,在克隆中执行以下操作:

git reset --hard hash# 
git push -f origin branch

在这里,branch是你想要推送的分支名称。Voilà。在使用强制推送前要小心。在熟悉它之前,您可能需要复制您的工作目录。


1
运行得非常好!只是我没有意识到“branch”指的是我的分支名称 :P - Manish Burman
1
你如何找到哈希#? - Connor Leech
1
我使用tig来查看哈希历史记录,以找到我想要回退到的那个版本。您还可以使用gitk、git log或像SourceTree这样的其他工具。有多种选项可用于检查历史记录并查找哈希。 - matthewdaniel
4
这不应该是被接受的答案。它并不会删除历史记录,只是将历史记录重置到之前的某个点。所有提交仍然可以通过哈希标识符进行访问。请阅读 @Droogans 发布的 删除敏感信息 - ctatro85
1
@CharlesPrakashDasari Git reflog是一个很好的起点。它可以帮助恢复意外删除、覆盖或强制拉取的内容。更不用说github会缓存页面,所以有可能(虽然不太可能)有人访问了那个页面并将其加为书签(如先前提供的链接中所述)。也许我误解了作者的问题。 - ctatro85
显示剩余3条评论

4
如果您想执行此操作,可以使用HEAD~10
git reset --hard HEAD~10

git push -f origin master

不建议删除服务器提交历史记录,尤其是:如果您有一个团队在此存储库上工作。

如果您有一个团队在此工作,我建议通过添加另一个提交来撤销您不想要的代码,以回退操作。


1

我已经将我的所有文件上传到了我的第一个Github项目中,包括一些带有秘密密钥的设置文件。在添加我的.gitignore文件之前,我不得不回去删除所有已经包含的版本,并从我的项目缓存中删除所有设置文件。

我是如何做到这一点的

gedit ./.git/logs/HEAD

找到您想要删除其之前所有内容的“新根”的40个字符SHA哈希值。将其复制到剪贴板并关闭它。(您可以使用或不使用gedit,它是Linux的默认文本编辑器)。

$> gedit ./.git/info/grafts

在此处粘贴SHA。进入您的项目目录。

$> cd ../..

$> git filter-branch

强制推送到主分支,否则它将阻止您尝试删除历史记录。

$> git push --force -u origin master

删除你的 grafts 文件。

$> rm ./.git/info/grafts

算了吧

好吧,我的答案只是解决问题的一半。我的公共活动 RSS 订阅仍然有链接指向所有细节,详细说明我想要删除的信息。显然,没有办法删除这些链接, 但你应该阅读 更改密码,并更新任何意外上传的敏感数据。


1
我只是想补充一下,因为今天我遇到了一个非常不寻常的情况,是我自己制造的。但是,一旦你完成了删除敏感数据的步骤,你可以采取以下解决方案:创建一个新的存储库,将所有已经清理过的提交推送到新存储库中,并删除旧的存储库。这样就会使你公开活动流中的旧分支/差异链接失效,GitHub会返回404错误,因为该存储库已不存在。 - C Jones

0

安装Git后,您还可以右键单击存储库文件夹 - Git GUI Here

选择存储库 - 可视化所有分支历史记录

右键单击所需的提交记录 - 重置主分支历史记录到此

现在您有3个选项:

Git

选择后,选择文件 - 重新加载

GitHub Desktop上选择提交中的还原,然后再次还原,使我们回到原始代码,然后只需清理这些还原提交即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接