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

Git repo history cleanup - tried BFG step by step - but the PR having lot more diffs - and how to check if password removed from history

我正在尝试从我的 Git 存储库历史记录中删除密码(我很早就从我的 Git 存储库中手动删除了密码,但不是从历史记录中删除,这次尝试清理我的 Git 存储库的整个历史)

同样,从分叉主回购开始,然后完成并按照步骤进行 - BFG Repo-Cleaner and tried to search on Whosebug like this

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

Git版本为2.21.0

您使用 BFG Repo-Cleaner 完全改写了您的 git 历史记录。如果您确定这是您想要做的,那么您不想使用拉取请求将您的分支与主分支合并。您想要将每个分支强制推回到 GitHub。这需要取消保护所有受保护的分支。 (主人通常受到保护)。如果这不是您自己的私有存储库,您需要确保每个人都同意您这样做。如果您正在这样做,请务必小心。

如果您确定要执行此操作。这些是您需要的命令:

git checkout <branch> #do this for every branch on your guthub repo
git push origin --force

尝试使用 new git filter-repo, which will replace the old git filter-branch or BFG

而不是 BFG

示例:

To replace the text 'password' with 'p455w0rd':

git filter-repo --replace-text <(echo "password==>p455w0rd")

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

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

之上重新设置新历史记录

删除密码前:

        u--u--u     (upstream/master)
       /
x--x--x             (master)
       \
        pr--pr--pr  (pull-request branch)

删除密码后,使用 --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)

您需要在 upstream/master 之上重新设置新分支,假设上游是您进行 PR 的原始存储库。

git fetch upstream
git switch pr
git rebase upstream/master

然后 PR 将只包含您的提交,而不是自开始以来的所有提交。