修复错误拉取仓库后的Git历史记录

9

我在设置 git 远程仓库时犯了错误,从一个完全不同的项目中获取了代码。

幸运的是,没有合并,但现在我的仓库中有两个项目的历史记录,并且我正在尝试找出如何将我的仓库恢复到我犯错误之前的状态。

我一直在阅读有关 reflog、rebase、gc 和其他命令的文章,试图弄清楚哪个命令可以帮助我摆脱我意外获取的东西,但目前还没有任何进展。

看起来我已经在我的仓库中拥有了两个项目的历史记录,但它们是完全独立的。实际上,存在着两个相互平行的提交树,事实上,在查看所有分支时,这就是我在 gitk 中看到的情况:

enter image description here

您可以看到中间的提交与历史记录的开头和结尾的提交没有连接。按日期,它们是交错的,但由于某种原因,gitk 没有显示它们的交错。

孤立的提交(在图片中间)是我想要摆脱的内容,它们似乎没有附加到任何分支。我的仓库中没有任何从任何 HEAD 返回到这组提交的路径。

到目前为止,我已经尝试了以下方法(按顺序尝试,以防有所区别):

git remote prune
git prune
git gc
git gc --aggressive --prune=tomorrow
git remote update --prune
git fetch --all

但是目前还没有什么帮助。有谁能建议我如何从我的存储库中删除这些提交?

1个回答

12

你只需要使用 git tag -d 0.1.something 命令删除悬挂标签 (0.1.something,其中的something在你的截图中看不到)。一旦完成这个操作,提交将可以被垃圾回收。

只要一个标签能够到达一次提交,这个提交就被认为是可达的并且会一直存在,直到你移除指向它的任何引用(分支、标签、其他引用等等),它会有效地免疫垃圾回收。


1
谢谢,这正是我所需要的,我没有想到标签可能会阻止我删除提交 +1。 - chrisbunney
2
使用 git tag -d $(git tag -l) 命令可以删除所有本地标签。 - Manuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接