在获取错误的回购后修复Git历史记录

在获取错误的回购后修复Git历史记录,git,Git,我犯了一个错误,在我的git repo上设置了一个遥控器,从一个完全不同的项目中获取 幸运的是,没有合并,但我现在有两个项目的历史浮动在我的回购协议中,我正试图找出如何使我的回购协议恢复到错误提取之前的状态 我一直在阅读有关reflog、rebase、gc和其他命令的内容,试图找出哪些命令可以帮助我清除意外获取的内容,但到目前为止,还没有找到任何位置 看起来我的回购协议中有两个项目的历史记录,但它们是完全独立的。基本上有两个独立的提交树彼此并行运行,事实上,这就是我在查看所有分支时在gitk中看

我犯了一个错误,在我的git repo上设置了一个遥控器,从一个完全不同的项目中获取

幸运的是,没有合并,但我现在有两个项目的历史浮动在我的回购协议中,我正试图找出如何使我的回购协议恢复到错误提取之前的状态

我一直在阅读有关
reflog
rebase
gc
和其他命令的内容,试图找出哪些命令可以帮助我清除意外获取的内容,但到目前为止,还没有找到任何位置

看起来我的回购协议中有两个项目的历史记录,但它们是完全独立的。基本上有两个独立的提交树彼此并行运行,事实上,这就是我在查看所有分支时在
gitk
中看到的:

<>你可以看到中间的约定在历史的开头和结尾没有连接到提交。就日期而言,它们是交错的,但是由于某种原因,
gitk
没有显示它们是交错的

孤立的提交(在图片中间)是我试图摆脱的提交,它们似乎没有附加到任何分支。我的回购协议中的任何头都无法返回到这组提交

到目前为止,我已经尝试过(为了避免产生影响):


但一切都没有起到作用。有人能建议我如何从我的repo中删除这些提交吗?

您只需要使用
git tag-d0.1.something来删除悬空标记(
0.1.something
,其中
something
在您的屏幕截图中不可见)。完成此操作后,提交将可以进行gc


只要有一个标记到达一个提交,这个提交就被认为是可到达的,因此将“永远”保持,它有效地不受垃圾收集的影响,直到您删除指向它的任何引用(分支、标记、其他引用等)

谢谢,这正是我所需要的,我没有想到标记可能会阻止我删除提交+1
git-tag-d$(git-tag-l)
以删除所有本地标记
git remote prune
git prune
git gc
git gc --aggressive --prune=tomorrow
git remote update --prune
git fetch --all