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 将只包含您的提交,而不是自开始以来的所有提交。
我正在尝试从我的 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
示例:
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 将只包含您的提交,而不是自开始以来的所有提交。