“ git reset --hard”命令不会删除不必要的提交

时间:2019-06-15 09:04:10

标签: git github

我正在关注Udemy教程,因此我从GitHub下载了一个包含50-60次提交的存储库。

现在我想跳到某个提交,例如提交16,并删除我不需要的提交(在本例中为17-50)。我绝对确定,我将不需要摆脱的提交。

因此,我进行了 static void m() throws MyExc3 { 的操作,将头部置于正确的提交位置,但是其他不需要的提交(17-50)仍然存在。

enter image description here

如何摆脱不必要的提交?

3 个答案:

答案 0 :(得分:3)

如果任何本地或远程跟踪分支未引用那些提交17-50的提交,则它们将消失。

在您的情况下,origin/master可能会静止

  • git remote remove origin有点极端,尤其是当您需要稍后退回时
  • (重设后)简单地强制推送(git push --force)就足以更新本地跟踪分支和远程分支。

键入git branch -a --contain 96e6c82来检查输出是否为空。

您至少需要git push --force才能使master仅包含所需的提交。

答案 1 :(得分:1)

我认为VonC的部分答案可以解决您的问题“ ...就您而言,它们可能仍被原产地/原产地引用...”

只需通过git remote rm origin将参考与远程原点分开 然后其他提交将消失。

答案 2 :(得分:1)

请记住,Git的正常工作方式只是将一些独立的提交称为“分支或标签的顶部”。这些犯人反过来参考了他们的祖先,从而建立了历史。

只要提交被“某物”引用,就可以保证它永远不会消失。这个“东西”可以是标签,分支,另一个提交或给定分支的引用日志。但是,当不再使用Git时,Git将让其垃圾收集器清除所有需要且不再有用的内容。另外,在实际删除某些内容之前,Git将首先观察宽限期(通常为三个月),然后再确定是否值得保留它。

因此正确的答案是:“ 不在乎这些提交,它们最终将自行消失”。

但是,如果您可以在git log结果中看到,如您的屏幕快照所示,那可能是因为您正在浏览仍引用它们的分支,或者是因为重新调用给定提交的显式标识散列总和,即使自身不再被引用也是如此。

在前一种情况下,如果实际上要删除给定分支中的某些特定提交( ),则可能需要使用git rebase -i对该分支进行基础设置以指定内容保存并丢弃。

如果您真的想立即彻底杀死它们(例如,由于您不小心推了色情或一些机密信息),则可以看看this entry。但是请记住,这只会清理您的本地存储库。如果您已经将内容推送到某处,则需要访问有关计算机。