清理git提交历史记录

时间:2012-01-12 01:00:52

标签: git

我的提交历史确实存在问题。嗯,这实际上不是一个问题,因为它不会影响问题,它更像是一个视觉问题。基本上我正在开发一个CakePHP项目,我试图将CakePHP添加为子模块,但是后来我放弃了。问题是我的历史现在看起来像这样(在塔上):

Screenshot from Tower

正如您所看到的,该行停止并重新开始,并且在所有CakePHP历史记录之前,它是其git存储库之一。我应该怎么做才能将其删除?!感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用git rebase -i进入交互式rebase模式,您可以在其中选择要保留的提交,要合并的提交(squash)以及要完全删除的提交(因此更改)该提交所应用的内容将从repo中删除。但是,只有在您尚未共享历史记录时才应执行此操作。如果历史记录发生了变化,并且有旧历史记录试图与新历史记录进行拉/合并,则会产生一些非常严重的合并冲突,因为git不会检测历史记录之间的任何连接。

答案 1 :(得分:1)

看起来您不小心将CakePHP直接拉入项目而不是将其添加为子模块。最简单的方法可能是删除整个仓库并重新开始(或者创建一个新仓库,只从现有仓库中拉出主分支)。您也可以尝试删除CakePHP fetch留下的所有裁判,但这将是一些工作,它会将对象留在您的仓库中几个月,听起来这是一个新项目,所以只是把你关心的提交拉成一个新的回购可能会更简单。

要创建一个只包含现有主分支的新仓库,以下内容应该有效:

mkdir newRepo
cd newRepo
git init
git fetch ../oldRepo/.git master:temp
git reset --hard temp
git branch -d temp

这只会获取master分支而不会获取其他内容。 temp的位是因为git否则会拒绝获取非裸存储库的HEAD。

无论如何,一旦你有一个新的回购,你应该只能使用

git submodule add git://url/for/CakePHP.git path/to/submodule

添加子模块。

相关问题