如何删除github中的所有提交历史记录?

Chi*_*ing 255 git github

我想删除所有提交历史记录,但保持代码处于当前状态,因为在我的提交历史记录中,有太多未使用的提交.

我该怎么做?

有没有git命令可以做到这一点?

git filter-branch ?
git rebase ?
... 
Run Code Online (Sandbox Code Playgroud)

我的代码托管在github.com上.

Des*_*gos 879

删除该.git 文件夹可能会导致您的git存储库出现问题.如果要删除所有提交历史记录但保持代码处于当前状态,则执行此操作非常安全,如下所示:

  1. 查看

    git checkout --orphan latest_branch

  2. 添加所有文件

    git add -A

  3. 提交更改

    git commit -am "commit message"

  4. 删除分支

    git branch -D master

  5. 将当前分支重命名为master

    git branch -m master

  6. 最后,强制更新您的存储库

    git push -f origin master

PS:这不会保留你的旧提交历史

  • 太棒了.:) 0.克隆:`git clone https:// github.com/blahblah/blahblah` :) (7认同)
  • 作为良好的家务,在这些命令之后,一个不错的:git gc --aggressive --prune = all可能是一个好主意.删除存储库也是如此. (3认同)
  • 为什么`添加-A`?当我执行`checkout --orphan`时,所有文件都已经上传; 不会'添加-A`有可能添加应保持未跟踪的文件? (3认同)
  • 我有一个 170MB 的存储库,做了这个,现在它是 180MB,我该如何解决它? (2认同)
  • 我想指出的是,如果黑客获得了 github 页面 (https://github.com/<repo>/blob/<hash>) 的 url。此方法不会删除该 url 链接。只有完全删除和重新创建 repo 才会。 (2认同)
  • 您可能想做“git add”。如果您不希望添加在 .gitignore 中忽略的文件,请使用“git add -A”来代替。 (2认同)
  • 这不会删除提交。它使它们成为孤儿,并在回答问题时清理历史。但是,提交仍然存在,但没有任何内容指向它们。一些管道命令或特定的日志命令会找到它们,您甚至可以恢复 master。可以使用 [git-prune](https://git-scm.com/docs/git-prune) 修剪孤立提交。但我从来没有使用过它,所以我不知道确切的命令,也不知道如何从远程删除孤儿提交。 (2认同)
  • 提交在引用日志中是否仍然可用? (2认同)

Ami*_*ari 87

如果您确定要删除所有提交历史记录,只需删除.git项目根目录中的目录(请注意它已隐藏).然后在同一文件夹中初始化一个新的存储库并将其链接到GitHub存储库:

git init
git remote add origin git@github.com:user/repo
Run Code Online (Sandbox Code Playgroud)

现在提交您当前版本的代码

git add *
git commit -am 'message'
Run Code Online (Sandbox Code Playgroud)

最后强制更新到GitHub:

git push -f origin master
Run Code Online (Sandbox Code Playgroud)

但是,我建议.git在执行这些步骤之前备份历史记录(存储库中的文件夹)!

  • 但如果我只想保持最新的10次提交? (4认同)
  • @DanDascalescu在新推出的主分支中只存在一个提交**是非常误导的** - 历史将*仍然存在*它将无法从该分支访问.例如,如果您有标记,指向较旧的提交,则可以访问这些提交.事实上,对于任何有点git foo的人,我确信在这个`git push`之后,他们仍然可以从GitHub存储库中恢复所有历史记录 - 如果你有其他分支或标签,那么他们就不会甚至还需要很多git foo. (4认同)
  • @JulioMarins:我刚试过这个并推到了GitHub.没有保留历史记录 - [只有一个提交](https://github.com/iDoRecall/comparisons). (2认同)