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

时间:2012-08-23 14:29:50

标签: git

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

幸运的是,没有合并,但我现在有2个项目的历史在我的回购中浮动,我正在试图弄清楚如何让我的回购恢复到它在我错误获取之前所处的状态

我一直在阅读有关reflogrebasegc和其他试图解决的命令,这些命令将帮助我摆脱我意外取出的东西,但到目前为止没有任何地方。

看起来我在我的回购中有两个项目的历史,但它们完全独立。基本上有2个独立的提交树彼此并行运行,事实上,这是我在查看所有分支时在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 个答案:

答案 0 :(得分:8)

您只需使用0.1.something删除悬空代码(something,其中git tag -d 0.1.something在屏幕截图中不可见)。一旦完成,提交将是gc-able。

只要有一个标记到达提交,这个提交就被认为是可以访问的,并且因此将永久保持"它会有效地免于垃圾收集,直到您删除任何引用指向它(分支,标签,其他参考,......)