Git repo 历史清理 - 逐步尝试 BFG - 但 PR 有更多差异 - 以及如何检查密码是否从历史记录中删除

Lea*_*ner 1 git github git-filter-branch git-rewrite-history bfg-repo-cleaner

我正在尝试从我的 Git 存储库历史记录中删除密码(我很长时间以来手动从我的 Git 存储库中删除了密码,但没有从历史记录中删除,这次尝试清除我的 Git 存储库的整个历史记录)

同样,从分叉主仓库开始,然后按照步骤 - BFG Repo-Cleaner并尝试像这样在 StackOverflow 上进行搜索

在本地 Git 存储库上遵循的所有步骤,一切看起来都很好,最后一个是git push,但在那之后我没有看到我的分叉存储库上的提交,尽管我看到了这条消息This branch is 853 commits ahead, 853 commits behind,并且它提供了创建PR(以及比较)的选项在这个 PR 中,我看到了很多差异 [比如前一段时间创建的新文件,并且仍然存在于当前版本中],这与我试图替换的密码无关。

Git 版本是 2.21.0

Von*_*onC 5

而不是 BFG,尝试新的git filter-repo它将取代旧的git filter-branch或 BFG

例子:

用“p455w0rd”替换文本“password”:

git filter-repo --replace-text <(echo "password==>p455w0rd")
Run Code Online (Sandbox Code Playgroud)

但最终结果将是相同的:一个新的提交历史记录,不仅适用于您当前的分支,而且适用于所有分支(找到您的密码的地方)
这意味着git push --all --force, 覆盖远程存储库的历史记录。

如果密码仅在 PR 分支中添加然后被删除,则仅过滤该 PR 分支而不是所有内容,然后根据 upstream/master

删除密码前:

        u--u--u     (upstream/master)
       /
x--x--x             (master)
       \
        pr--pr--pr  (pull-request branch)
Run Code Online (Sandbox Code Playgroud)

删除密码后,使用--refs pr(用你的拉取请求分支的名称替换 'pr': git filter-repo --replace-text <(echo "password==>p455w0rd") --refs pr)

        u--u--u     (upstream/master)
       /
x--x--X             (master)
      |\
      | pr'--pr'--pr'  (new pull-request branch)
       \
        pr--pr--pr  (old pull-request branch)
Run Code Online (Sandbox Code Playgroud)

您需要在上游/主控之上重新建立新分支,假设上游是您进行 PR 的原始存储库。

git fetch upstream
git switch pr
git rebase upstream/master
Run Code Online (Sandbox Code Playgroud)

那么 PR 将只包括您的提交,而不是自开始以来的每个提交。