我正在关注Udemy教程,因此我从GitHub下载了一个包含50-60次提交的存储库。
现在我想跳到某个提交,例如提交16,并删除我不需要的提交(在本例中为17-50)。我绝对确定,我将不需要摆脱的提交。
因此,我进行了 static void m() throws MyExc3 {
的操作,将头部置于正确的提交位置,但是其他不需要的提交(17-50)仍然存在。
如何摆脱不必要的提交?
答案 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。但是请记住,这只会清理您的本地存储库。如果您已经将内容推送到某处,则需要访问有关计算机。