远程提交如何在强制推送中幸存下来?

时间:2021-05-31 18:36:01

标签: git

我在我的功能分支中泄露了一个文件的凭据。审阅者发现了错误,显示了哈希提交,当引入了错误信息并要求我安全删除时,我们将其称为 a6859b6。我编辑了文件,压缩了我分支中的所有提交并强制推送。

然后 PR 获得批准,并合并到 master。我的分支在远程和本地被删除。 master 的提交日志没有显示任何“坏”提交 a6859b6

令人惊讶的是,在确切的提交哈希 https://gitlab.com/blabla/-/commit/a6859b6 上查询 remote 仍然显示有问题的代码。

是有意为之吗?我们如何称呼这种“孤儿”提交? git 对这些做了什么,是否可以清除特定的孤立提交?

编辑:GitLab 回复了我的支持请求

  • 建议轮换泄漏信用证。

  • GitLab 有一个 housekeeping 进程,它每 2 周自动修剪一次远程仓库上的松散提交

1 个答案:

答案 0 :(得分:3)

<块引用>

是有意为之吗?

是的,一旦对象未被引用,git 不会立即删除它们。这可能最终由 GC (git gc) 完成。不立即删除此类引用可让您轻松地使用 git reflog 恢复丢失的数据(只要您之前添加/提交了数据)。

<块引用>

我们如何称呼这种“孤儿”提交?

你可以称它们为松散对象/提交。这个名字是also used in the docs

<块引用>

git 对这些做了什么,是否可以清除特定的孤立提交?

Git 可能最终决定清理这些(取决于 gc.auto)。这也可以通过在要删除它的存储库中运行 git gc --prune=now 手动完成(您需要 shell 访问权限)。如果您有很长的引用链引用不再被引用的对象,您可能需要添加 --aggressive: git gc --aggressive --prune=now

如果您没有直接访问权限,您可以镜像存储库,运行 git gc --prune=now,删除远程存储库,重新创建一个空存储库并从本地镜像推送所有内容。

无论如何,我会强烈建议您尽快更改/使泄露的凭据无效,因为人们可能已经下载了您的提交(并且审阅者也看到了这些)。当您确定泄露的凭据在任何地方都无效时,您无需担心未引用的提交。

相关问题