【问题标题】:how to delete all commit history in github? [duplicate]如何删除github中的所有提交历史? [复制]
【发布时间】:2012-11-22 21:22:44
【问题描述】:

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

我该怎么做?

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

git filter-branch ?
git rebase ?
... 

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

【问题讨论】:

  • 1) 删除父目录以及子目录中可能有单独的 .git/.gitignore 文件的所有 .git 文件和 .gitignore 文件。为此,请运行:rm -rf .*git 命令,该命令将删除任何以 .git 结尾的文件。 2)返回父目录并运行git init,它将通过创建一个没有历史记录的新空白.git文件来初始化.git文件3)运行git add .git add *4)运行git commit --all -m "initial commit" 5) run git --set-upstream origin ` 6) run ` $ git push --mirror

标签: git github


【解决方案1】:

删除 .git 文件夹可能会导致您的 git 存储库出现问题。如果您想删除所有提交历史记录但将代码保持在其当前状态,则按照以下方式执行此操作非常安全:

  1. 结帐

    git checkout --orphan latest_branch

  2. 添加所有文件

    git add -A

  3. 提交更改

    git commit -am "commit message"

  4. 删除分支

    git branch -D main

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

    git branch -m main

  6. 最后,强制更新你的仓库

    git push -f origin main

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

【讨论】:

  • 确实很棒。 :) 0. 克隆:git clone https://github.com/blahblah/blahblah :)
  • 作为好管家,在这些命令之后,一个不错的: git gc --aggressive --prune=all 可能是个好主意。删除存储库也是如此。
  • 为什么是add -A?当我执行checkout --orphan 时,所有文件都已暂存; add -A 不会有可能添加不应该被跟踪的文件吗?
  • 我想指出,如果黑客获得了 github 页面 (github.com/<repo>/blob/<hash>) 的 url。此方法不会删除该 url 链接。只有完全删除和重新创建 repo。
  • 这不会删除提交。它使他们成为孤儿,并在回答问题时清理了历史。但是,提交仍然存在,但没有任何东西指向它们。一些管道命令或特定日志命令会找到它们,您甚至可以恢复 master。可以使用git-prune 修剪孤立提交。不过我从来没有使用过它,所以我不知道确切的命令,也不知道如何从远程删除孤立提交。
【解决方案2】:

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

git init
git remote add origin git@github.com:user/repo

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

git add *
git commit -am 'message'

最后强制更新到 GitHub:

git push -f origin master

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

【讨论】:

  • 但如果我只想保留最新的 10 次提交?
  • 这行得通,但它会像@Desta Haileselassie Hagos 所说的那样,保留之前在树上提交的历史记录
  • @JulioMarins:我刚刚尝试过这个并推送到 GitHub。没有保留历史记录 - 有 only one commit.
  • @DanDascalescu 在新推送的主分支中仅存在一个提交非常具有误导性 - 历史将仍然存在它只是赢了'不能从该分支访问。例如,如果您有指向旧提交的标签,则可以访问这些提交。事实上,对于任何有一点 git foo 的人来说,我确信在 git push 之后,他们仍然能够从 GitHub 存储库中恢复所有历史记录——如果你有其他分支或标签,那么他们不会甚至不需要太多 git foo。
  • @TomášZato 你是在说.git/config 中的上游设置吗?如果是这样,请先保存您的 .git/config,然后再恢复它。
猜你喜欢
  • 2014-07-07
  • 2011-10-26
  • 2023-01-22
  • 2017-04-11
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2013-01-23
  • 2020-06-26
相关资源
最近更新 更多