Git删除第二个存储库和历史记录

时间:2016-10-05 14:39:05

标签: git

我相信我复制粘贴了一个git项目内容(编辑) B.在我项目的文件夹中A.经过一些测试和修改后,我删除了git项目B,并添加了它。但是所有的提交历史仍然显示在我的项目A中。

  • 如何删除原始项目中的所有内容?

观察:

  • 当我做git branch -av时,我只看到项目A中的分支很好。

  • 当我做git remote时,我只看到好的来源(我删除了项目B - 来源)

  • 当我展示所有分支时,我会看到两个项目的提交。

  • 没有提交已从项目A合并到B或反之亦然。 (我在sourcetree中可以看到两个项目都没有相互交叉。

  • 在.git文件夹中,我可以在日志中看到SHA并引用不属于项目A的dans。

我不知道自己到底做了什么才能最终得到这种状态......

评论:

文件夹路径示例:

C:\ gitRepo \ ProjectAB \

C:\ gitRepo \ ProjectAB \项目A-1 ...

C:\ gitRepo \ ProjectAB \项目A-2 ...

C:\ gitRepo \ ProjectAB \项目B-1 ...

C:\ gitRepo \ ProjectAB \项目B-2 ...

1 个答案:

答案 0 :(得分:0)

当您将B复制粘贴到A git仓库时,您创建了 nested git repo 。 这意味着,每次B有新提交时,A都会将新的B SHA1记录为 gitlink special entry in A index)。

当您删除B时,您在A中添加并提交该删除(以记录gitlink B的删除)。

但是A的历史仍然会包含A在历史中被修改的所有实例(因为B gitlink每次B都有自己的新提交时会改变。)

要从A历史记录中完全删除B,您需要git filter-branch(重写历史记录)

类似的东西:

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch PATH-TO-B' \
   --prune-empty -- --all

OP Kadgiko的案例after discussion中,似乎:

  • 将回购B复制 over A(产生混合的.git内容)
  • 看起来这些更改已转移到远程A(因此无法进行克隆)。

结论是:

  

好吧,将创建一个新项目并从那里开始,这是一个相对较新的项目,如果我们失去最后100个提交,它将不会有太多麻烦。