【问题标题】:Git: Can I remove all history of a pushed file, except of it's last commit?Git:我可以删除推送文件的所有历史记录,除了它的最后一次提交吗?
【发布时间】:2021-03-01 05:00:12
【问题描述】:

我有一个包含敏感数据历史记录的推送文件。

我想从所有文件提交历史中清除存储库,只保留当前的,即 没有敏感数据。

我该怎么做(使用 git bash 或 GitHub desktop\web)?

【问题讨论】:

  • stackoverflow.com/questions/35115585/… 有什么理由不适合你吗?
  • 文件 在 Git 中没有历史记录。文件是提交的成员,提交历史。但是,对于您的特定用例,BFG(我从未使用过)有一个特定的解决方案;考虑使用它。
  • @JeffMixon 首先,您提供的解决方案还删除了最后一次提交 - 我不想删除。其次,鉴于我的文件位于 src/main/resources/myfile.java 下,我尝试过 git filter-branch --tree-filter 'rm -f resources\myfile.java' -- --all ,但没有为我工作。

标签: git github git-bash


【解决方案1】:

找到一个你愿意保留的文件版本,比如最新的master copy's clean:

safeversion=`git rev-parse master:path/to/file`

过滤历史记录删除该文件的任何不安全版本:

git filter-branch \
        --setup safeversion=`git rev-parse master:path/to/file` \
        --index-filter '
                if thisversion=`git rev-parse -q --verify $GIT_COMMIT:path/to/file` &&
                        [[ $thisversion != $safeversion ]]
                then git update-index --force-remove path/to/file
                fi
        ' -- --all

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2021-06-24
    • 2019-11-29
    • 1970-01-01
    • 2014-05-05
    • 2012-04-06
    相关资源
    最近更新 更多