0

前段时间我不小心向 BitBucket git 存储库提交了密码,在当前 master 后面有几个提交。虽然我后来通过不使用它提交来删除密码,但它仍然存在于过去的几次提交中。

我不介意在这些提交期间丢失更改的历史记录。我也不担心有人在提交密码时看到了密码,但我想删除此历史记录以避免将来出现问题。

采取什么步骤来确保在这些步骤之后,以后访问此 BitBucket 存储库的任何人都无法找到此密码?

假设我的提交(从最旧到最新)带有(假)SHA1:c001 c002 c003 c004

c002 和 c003 是我想完全删除的“坏”提交的哈希值。我希望 master 留在 c004 上,但是如果我让他们访问这个 repo,任何人都无法再访问 c002 和 c003。我尝试按照关于提供重置或变基的类似问题的说明进行操作,但无法使它们正常工作;我要么设法删除我机器上的提交,但无法推回 BitBucket,或者在搞砸后无法完全删除我的机器。

有人可以解释一下所需的步骤: 1. 从存储库的历史记录中删除 c002 和 c003 2. 确保它保存在 BitBucket 上,并且人们既不能在 BitBucket 的 GUI 中查看这些提交,也不能通过将存储库克隆到他们的机器来查看这些提交

我会很感激能解释命令的作用的答案,而不仅仅是编写一些对我有用或对我不起作用的神奇 git 命令。此外,这个问题是专门针对 BitBucket 的,以防某些事情可能是特定的......我在尝试将更改推送回 BitBucket 后,在进行本地回购后遇到了“更新被拒绝,因为您当前分支的尖端落后”的问题用 reset --hard 改变。在几次失败的尝试和对 git 文档的挫败之后,我决定问 SO。

.

4

2 回答 2

3

我会做的是:

git checkout revision-where-the-file-was-added
git rm the-file-with-the-password
git commit --amend --no-edit # fix the revision
git cherry-pick revision-where-the-file-was-added..the-branch # replay all later revision
# if you like the result
git branch -f the-branch
git push -f origin the-branch
git checkout the-branch

这假设在添加文件后有一行修订。如果以后的历史中涉及合并,您可能需要使用cherry-pick中的选项。

于 2019-08-01T20:20:00.603 回答
0

您可以结合使用 arebase和 agit push origin master --force来重写存储库的历史记录并强制推送您的更改,这样任何人都无法查看提交历史记录中的密码。

从你的主分支你可以做git rebase origin/master -i,然后edit是你推送密码的提交。然后运行 git add .添加它 - 然后git commit --amend继续git rebase --continue使用变基。完成后,git push origin master强制推动它并以您想要的方式重写历史。

于 2019-08-01T20:16:48.987 回答