如何通过终端删除 Github 中的旧提交?

Lou*_*e79 5 github

我有一个存储库。

如何通过终端删除我的旧提交?我的 SSH 密钥已上传。

(我用的是github pages,这就是为什么版本跟踪并不重要,不想浪费Github的存储空间)

小智 8

删除.git文件夹可能会导致 git 存储库出现问题。如果您想删除所有提交历史记录但将代码保持在当前状态,那么这样做是非常安全的,如下所示:

查看

git checkout --orphan latest_branch
Run Code Online (Sandbox Code Playgroud)

添加所有文件

git add -A
Run Code Online (Sandbox Code Playgroud)

提交更改

git commit -am "commit message"
Run Code Online (Sandbox Code Playgroud)

删除分支

git branch -D master
Run Code Online (Sandbox Code Playgroud)

将当前分支重命名为 master

git branch -m master
Run Code Online (Sandbox Code Playgroud)

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

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

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


Rik*_*röm 6

你在这里有一个非常好的答案:https : //stackoverflow.com/questions/448919/how-can-i-remove-a-commit-on-github

我引用

注意:请参阅下面git rebase -i评论中的替代方案——

git reset --soft HEAD^

首先,删除本地存储库上的提交。您可以使用git rebase -i. 例如,如果这是您的最后一次提交,您可以git rebase -i HEAD~2在弹出的编辑器窗口中执行 并删除第二行。

然后,使用 强制推送到 GitHub git push origin +master

有关更多信息,请参阅Git Magic Chapter 5: Lessons of History - And Then Some(即,如果您想删除较旧的提交)。

哦,如果你的工作树很脏,你必须先做git stash ,然后再做git stash apply

希望这对你有帮助:)

==== 编辑 ====

实际上,我只是重读了我链接到的帖子,特别是评论“警告 2” /sf/ask/31424361/

从中我了解到 git 似乎创建了一个新的提交并将指针移动到它,而不是在使用强制推送时删除它。也就是说,如果有人已经拥有您提交的 SHA1,他们仍然可以访问它。因此,在考虑到这一点时,我必须建议您按照 Tomasz Klim 的建议进行操作。


Tom*_*lim 0

  1. 创建新的存储库。
  2. 将所有文件复制到其中。
  3. 销毁旧存储库。