当前位置: 首页 > 知识库问答 >
问题:

请问 github 项目如何删除或更新之前记录?

丁嘉庆
2024-05-13

描述:
这次被第三方扫到有资安问题,此项目已有几千次commit,发现第435次被员工上传敏感资料 + 几次commit message也有问题
个人知识:
我个人只会覆盖最新一笔的救援方式,想不到如何无害解决此问题
能想到解决方式:
最差情况可能需要狠下心全部git重来,但之后无法再查之前 history

共有2个答案

叶卓君
2024-05-13

上传的敏感资料是否有多次变更?

  • 如果只有在 commit 435 的时候提交了,可以在 435 之后创建一个分支,把对应的敏感文件目录添加到 .gitignore 中,把敏感目录移出项目目录,然后把 .gitignore 的修改和敏感文件目录的 remove 记录提交。最后把主线分支 rebase 到你创建的新分支上面。最后再用 rebase 把新的 Commit 用 squash 合并到 commit 435 中。这样敏感文件的commit历史就没有了。
  • 如果你的敏感文件有很多次修改。那么Git的推荐修改方式是使用 git-filter-repo

    • 用 git filter-repo 彻底删除Git中的大文件
    • 利用git-filter-repo无缝迁移git项目

至于Commit Message 你直接在 rebase 的过程中选择对应的提交记录把标识从 pick 改成 edit 就可以修改了。在操作的过程中 Git 会在终端提示你如何操作。


最后完成之后需要 git push -f 强制推送到远端。所以你如果不是特别熟悉 rebase 的话,最好把原始分支做一个备份再进行 rebase (默认你不知道怎么找已经被 drop 掉的提交记录 hash 值)

锺离辰沛
2024-05-13

GitHub 上的项目记录(commit history)是公开和不可变的,一旦提交到仓库,就无法直接删除。这是因为 Git 的设计哲学之一就是保持数据的完整性和可追溯性。

然而,有几种方法可以处理你所描述的问题:

  1. 使用 git-filter-branchBFG Repo-Cleaner 来重写历史

    你可以使用 git-filter-branch 或更现代的 BFG Repo-Cleaner 工具来重写 Git 历史。这些工具允许你删除或修改特定的提交,但请注意,这会改变项目的历史,可能导致与其他克隆或分支的不一致。

    使用 BFG Repo-Cleaner 的例子(假设你想删除包含敏感信息的文件):

    java -jar bfg.jar --delete-files your-sensitive-file.txt your-repo-dirgit reflog expire --expire=now --all && git gc --prune=now --aggressivegit push origin --force --all

在执行这些操作之前,请确保你完全理解它们的影响,并备份你的仓库。

  1. 创建一个新的分支或仓库

    如果重写历史的风险太高,你可以考虑创建一个新的分支或仓库,并只包含没有问题的提交。这样,你可以保留原始仓库的历史记录,同时在新仓库中提供一个干净的版本。

  2. 修改最新的提交以修复问题

    如果你只是想修复最近的几次提交(例如,修改 commit message 或回滚某个包含敏感信息的提交),你可以使用 git commit --amendgit revert 来实现。但这不会删除原始提交,只是添加新的提交来覆盖或撤销它们。

  3. 从记录中删除敏感信息

    如果敏感信息只是存在于某个文件的某个版本中,你可以使用 git filter-branchBFG Repo-Cleaner 来删除那个文件的所有历史记录,或者只删除包含敏感信息的那个版本。但同样,这会改变项目的历史。

  4. 通知相关人员

    除了技术上的处理,你还需要通知所有相关人员(包括团队成员和其他可能接触到该项目的人)关于这个问题,并告知他们如何更新到修复后的版本。

  5. 防止类似问题再次发生

    最后,确保建立和维护良好的安全实践和代码审查流程,以防止类似的问题再次发生。

请注意,直接修改或删除 Git 历史记录可能会带来风险,特别是在与其他开发者或系统集成的情况下。在执行任何操作之前,请确保你完全理解这些风险,并考虑与团队或组织中的其他成员进行沟通。

 类似资料:
  • 但是建议的解决方案对我来说都不起作用。我从sqlite数据库中的RecycerView列表项,当我向左滑动时,相应的数据将成功地从数据库中删除。由于某些原因,昨天一切都工作得很好,删除的项从列表中消失了,但从今天开始,该项在RecycerView中仍然可见。下面是我的代码:

  • 每个人 我不知道是否已经有人问过这个问题,但我到处找,但找不到。我正在使用GitHub进行Intellij IDEA项目。我在工作中使用我的台式计算机来开发。完成后,我在Github上做了一个提交,它直接在我的帐户上。但是,有时我想在家里继续使用笔记本电脑,使用同一个项目并修改和提交它。由于不太了解Github与Intellij的集成,我知道我可以将现有项目下载到本地计算机上。但我的问题是,如何更

  • 我已经在GitLab中创建了几个存储库。其中一个是为了测试目的,有一些提交和分支。我想删除或删除此存储库。我该怎么做呢?

  • 本文向大家介绍Android studio 如何删除项目 module,包括了Android studio 如何删除项目 module的使用技巧和注意事项,需要的朋友参考一下 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: Android Studio对module做了一个保护机制,module是不能随

  • 有什么方法可以立即删除GCP项目吗?