是否可以删除所有提交并仅保留最后一个提交

时间:2012-07-17 12:28:14

标签: git command-line github

我试图遵循其他类似主题中的一些建议,尝试重新提交我的提交:

git rebase --onto master~5 master~1 master

但我没有得到我想要的东西(但可能是由于我的无力)。

现在,我想要的是删除我的所有提交并仅保留文件的最后一个版本,就像我删除我的文件并且我第一次再次发布它一样。

我想删除一些要点的提交;我真的只对最后一个版本感兴趣。

真的,我想使用像pastebin这样的gist,而不保存修订版,但只保留最后一个版本。

我知道我可以删除我的要点并创建另一个,但如果可能的话,我更喜欢链接没有改变。

1 个答案:

答案 0 :(得分:4)

如果您尝试仅丢弃单个文件的所有先前历史记录,并且该文件用于修改其他文件的提交,则rebase(可能)是必需的。如果您只想丢弃整个存储库的所有历史记录,可以选择以下两个选项:

将HEAD设置为新的无父提交,并将当前工作目录作为其树(git checkout具有执行类似功能的--orphan选项):

$ TREE=$( git show -s --format='%T' HEAD )
$ HEAD=$( echo initial commit | git commit-tree $TREE )
$ git reset $HEAD

完成此操作后,所有以前的提交仍然可以作为对象访问,但您必须努力获取它们。如果您有分支和/或标记引用它们,它们将保持不变,但如果它们未被引用,它们最终将被垃圾收集器丢弃。

或者,只是吹掉git repo并重新开始:

$ cd $( git rev-parse --show-cdup )   # Go to top level directory
$ rm -rf .git
$ git init
$ git add .