从Gitlab合并请求中删除意外推送的数据

时间:2017-07-19 12:51:07

标签: git gitlab

问题很简单:一个人在Gitlab上将一些不必要的(也可能是私人的)信息推送到origin。我需要删除它。

我理解如何在git中改变历史,以及如何让它变得像我想要的那样。所以我实际上清理了历史,并将其推到了origin

但问题是这个分支有一个合并请求,它收集了这个分支的所有推送版本(包括这个不必要的信息)。所以我决定删除这个合并请求。这不是一项微不足道的任务(它不能通过GUI完成),但经过一些搜索,我发现这可以通过Gitlab API完成,如下所示: curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/4/merge_requests/85(看https://docs.gitlab.com/ee/api/merge_requests.html#delete-a-merge-request)。

之后我跑了#34; Housekeeping&#34;来自Gitlab上的Project Settings应该进行垃圾收集,但存储库大小没有改变。我检查过,是的 - https://gitlab.com/<PROJECT>/commit/<HASH>仍然可以访问错误的提交。因此,似乎还有其他事情不允许删除这些提交。

我应该怎么做才能防止可能的私人信息泄露,并将存储库从origin ~130MB缩小到我的本地.git/ ~30 MB。

P.S。我知道有关创建新项目并将旧项目导入其中的硬核解决方案 - 这不是我想要的。

P.P.S。我使用Gitlab托管的服务器,所以我不能(或者我可以?)只是打开ssh控制台并手动删除一些文件/数据库入口。

UPD。通过API,我获得了origin提交列表(https://docs.gitlab.com/ee/api/commits.html#list-repository-commits)。错误的提交不在此列表中,因此该列表应与我的本地提交列表相同。

1 个答案:

答案 0 :(得分:0)

行。我已经说过我之前的尝试了。我还尝试了这个答案中的本地gcreset --hard HEAD^ & push -f技巧:https://stackoverflow.com/a/37253227/4034402

几天之后(我实际上并不知道什么时候),我的回购大小变成了37Mb! 虽然通过直接链接到提交后,我仍然能够获得所有这些清除文件。 所以它只是部分解决方案,但我决定在这里发布它给任何感兴趣的人。 另外,我不知道实现这种部分解决方案需要哪些步骤,哪些步骤不是。