我做出了错误的提交,并将其推送到我的私人bitbucket.org存储库中。如何才能从远程存储库的历史记录中完全删除此提交?
我尝试了以下方法:
git reset --hard HEAD~1
git reset HEAD~
git commit -m "some message"
git push -f
我这样做是基于Bitbucket git reset的解决方案
但是,以前的提交可以通过Bitbucket的Web界面访问。
我的意思是,仍然可以使用类似的链接来访问https://bitbucket.org/user/repo/commits/<deleted commit hash>
它们(尽管它们未在Web界面的存储库提交中列出)。
是否从存储库中获取了此信息(我打算删除的历史记录)?
要么
这是BitBucket和Git本身的组合功能。Git提交是不可变的对象。您不能在历史记录图中移动它们的位置,只能在其他位置创建新的提交,有时甚至删除大量的提交。
分支只是一个移动标签(标签是与提交相关联的静态标签)。当分支为HEAD时,您进行的所有提交都将标签与它们一起移动。您可以将同一标签移动到图形的无关部分,而不必前后移动。当您变基时,这就是发生的情况。在新的基础上创建的内容(大多与原始内容相同)的新提交将被创建,并且分支标签被移动以指向它们。您始终可以清除不属于本地存储库中分支的未引用提交。
当您在本地工作时,一切都很好。一旦开始使用遥控器,就必须考虑到您可能不是唯一使用回购协议的人。一旦强行推动了重新建立分支的分支,就会发生以下几件事:
您或服务器不再引用旧分支中的提交,但它们仍然存在。实际上,克隆您的存储库的任何其他用户仍会在其本地版本中指向这些提交,直到他们明确更改其历史记录为止。实际上,如果他们要用力推动,则分支标签将立即移回原来的位置,从而丢弃您的基准。
Git不会在克隆的存储库上施加层次结构。每个代码都代表了代码的真实状态。因此,显然未使用的提交会保留一段时间,即使它们没有出现在历史记录中的本地分支中也是如此。话虽如此,如果git达到一定的年龄而又没有新的后代,则git可以定期修剪这些未引用的提交。
鉴于以上信息,您没有做错任何事情。如果没有明确引用其哈希,将不会克隆已删除的提交。如果您将提交搁置足够长的时间,很有可能会自动清除。如果那足够好,您可以顺其自然。另一方面,如果您再次需要该提交,请继续阅读。
确保干净回购的最可靠方法是从头开始。您可以创建一个本地仓库,该仓库经过修剪,清除,并且通常符合您的规格。完成此操作后,您可以删除服务器副本。然后,使用原始名称创建一个新的空存储库,并将原始记录推入该存储库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句