如何完全删除从 SourceTree (Windows) 到 Bitbucked 的推送

How to delete a push from SourceTree (Windows) to Bitbucked completely

我在 Windows 10 上使用 SourceTree 提交并推送两个文件,然后再提交 + 推送。 现在我注意到,第一次推送的其中一个文件的评论中有敏感信息。 我试图完全删除那个推送,所以它不会再存储在 bitbucked 中。

这是我目前在 git bash 控制台中所做的:

//Reset my local head: both achieved the same
git reset --hard MyLastGoodCommitHash
git reset --hard HEAD~2
//Now overwrite the original server content
git push -force
git gc

现在,如果我在 BitBucket 中查找提交,最后一个好的提交在头上,在 SourceTree origin/develop 中,开发在同一个好的提交上。此外,“git status”是干净且积极的。 但是在 SourceTree 中,我仍然可以看到我在那之后所做的其他两个提交,我可以检查它们。同样在 Bitbucked 中,如果我将搜索与不需要的提交的提交哈希一起使用,我仍然可以找到它们。所以它们实际上并没有被删除。

两个问题:

当您执行 reset --hard 时,您 孤立了 不需要的提交,这意味着没有分支名称指向它们。 (我在这里假设也没有标签名称指向它们;如果是,您需要单独删除该标签。)

然后当你用力推动时,你将这种情况反映到 BitBucket。

到目前为止,还不错。但是孤儿提交不会立即被销毁。如果你想要那个,你需要说

git gc --prune=now --aggressive

这应该将提交从本地 Git(包括 Sourcetree)的范围内移除。但它并不强制 BitBucket 的 Git 执行相同的操作。如果这是一个严重的问题,您可能需要向 BitBucket 人员开具一张票,以便让他们为您做这件事。