如何完全清除 git 存储库,而不删除它
Posted
技术标签:
【中文标题】如何完全清除 git 存储库,而不删除它【英文标题】:How to completely clear git repository, without deleting it 【发布时间】:2015-04-19 03:46:11 【问题描述】:如何删除存储在 git repo 上的所有文件和文件夹,但保留存储库?是否有一些重新启动 git repo 的命令? 我在这方面找到了很多例子,但我弄得更糟。存储库已链接。因此,如果有人愿意一步一步地向我解释,我将非常感激。
【问题讨论】:
有什么用?版本控制的全部目的是跟踪更改,保留无效历史记录的意义何在?只需清除您的本地副本,创建一个新副本,将其远程设置为与当前副本相同,然后git push -f
以完全覆盖当前似乎无用的存储库历史记录
请澄清您的问题;你想保留还是删除你的文件?你的历史呢?实际的 git repo 状态是什么?您希望它是什么状态?
@ChrisMaes 那么历史在这一点上对我来说并不重要。这是一个新的仓库,所以我可以删除历史记录和文件和文件夹,但清除文件是我的首要任务......
如果您想要或不想要下面的答案,您能发表评论吗?
@ChrisMaes 我收到错误消息:更新被拒绝,因为远程包含您在本地没有的工作。这通常是由另一个存储库推送到相同的 ref 引起的。您可能希望在再次推送之前先集成远程更改(例如,'git pull ...')。如果我不想拉它,因为我想推送新版本的项目怎么办?附:当我尝试推送到远程时发生错误。
【参考方案1】:
如果你只有一个本地 git 存储库
如果你想抹去你的全部历史并重新开始:
cd <repo>
rm -rf .git
git init
然后重新开始提交。
如果您想同时删除文件和历史记录:
cd <repo>
rm -rf *
git init
并开始添加文件并提交...
如果您与远程存储库链接 如果您想重新开始,但不介意留下一些旧历史;有一个快速的方法:
git pull
git rm -r *
git commit
git push
现在您的存储库又是空的,您将只剩下一些旧的历史记录。如果您还想清理所有历史记录;这需要更多的工作(请注意,这会给链接到同一远程存储库的其他任何人带来麻烦):
git checkout <first commit hash>
git rm -r *
touch README
git add README
git commit --amend
git push -f
请注意,我为第一次提交创建了一个空的 README 文件,因为提交不能为空。
【讨论】:
感谢这对我帮助很大! :) 另外,您可以使用git checkout --orphan <branch_name>
创建第二个提交树。你的旧历史会继续存在,但不会被你的新历史所触及。
不工作。每当我从分离的 HEAD 转移到 master 分支时,所有旧的东西都会回来。
重置对我来说似乎效果更好 - ***.com/a/16500248/4376643【参考方案2】:
如果您谈论的是现有的远程仓库(而不仅仅是本地仓库,这很简单),您可以:
克隆它 删除所有远程分支:git push origin --delete <branchName>
(见“Delete a Git branch both locally and remotely”)
创建一个新的孤立主分支(参见“How can I completely empty the master branch in Git?”)
git branch -D master
git checkout --orphan master
至少提交一次并推送。
【讨论】:
感谢您的回答 :) 当我尝试删除 master 分支(这是唯一的一个)时,我收到了这个错误:默认情况下,删除当前分支被拒绝,因为下一个 'git clone' 赢了'不会导致任何文件被检出,导致混乱你可以在远程存储库中将'receive.denyDeleteCurrent'配置变量设置为'warn'或'ignore',以允许删除当前分支,无论是否有警告消息。要压制此消息,您可以将其设置为“拒绝”。拒绝删除当前分支:refs/heads/master @VonC 我不确定我是否理解正确...... @nemo_87 它只是一个本地仓库!?这解释了您的错误消息。我会把答案留给实际上必须清空(远程)仓库的其他人。 @nemo_87 对于本地存储库,您不必按照第一个答案的建议进行操作。在任何地方只需git init
,您就可以开始了:您的问题对于本地回购没有意义。
当我在 Azure DevOps 的 repo 中拥有有限的权限,但没有删除整个 repo 并重新创建新的权限时,删除远程 master 分支工作正常。
@JussiPalo 这确实是个问题。我很确定我在 2015 年写这篇文章时没有想到 Azure Devops 及其特权(因为当时它还没有被命名为 DevOps:en.wikipedia.org/wiki/…)以上是关于如何完全清除 git 存储库,而不删除它的主要内容,如果未能解决你的问题,请参考以下文章