【问题标题】:Delete all files and history from remote Git repo without deleting repo itself从远程 Git 存储库中删除所有文件和历史记录,而不删除存储库本身
【发布时间】:2021-09-10 22:30:42
【问题描述】:

如果有人能告诉我如何在不实际删除存储库本身的情况下删除 git 存储库中的每个文件/文件夹,我将不胜感激。我也想删除与这些文件相关的所有历史记录。

【问题讨论】:

  • 您的标题说您正在谈论清理“远程 git repo”并且您已将此问题标记为“github”,因此您是否试图减少正在使用的空间量在 github 上?还是您在谈论另一个远程存储库?更多细节在这里会有所帮助。
  • 我想'删除我的 git repo 上的每个文件/文件夹,而不实际删除 repo 本身。'。我说的是我的 github 存储库。
  • 删除历史记录还是保持历史记录不变?
  • 那么天花板鱼的答案是正确的(删除分支和标签)。你为什么要这么做?

标签: git


【解决方案1】:

正如我在this answerDelete or remove all history, commits, and branches from a remote Git repo? 中解释的那样,您还可以通过执行以下操作来实现与Ceilingfish's answer 相同的事情(即删除远程仓库中的所有引用/分支/标签):

  1. 使用初始提交创建新的空仓库:

    mkdir new
    cd new
    echo "This is the README" > README.md
    git init
    git add .
    git commit -m "Add README.md (initial commit)"
    
  2. 添加远程仓库作为来源:

    git remote add origin <url-to-remote>
    
  3. 镜像推送到远程:

    git push origin --mirror
    

这将删除远程仓库中的所有引用/分支/标签,任何悬空提交最终可能会被垃圾收集。来自official Linux Kernel Git documentation for git push(重点是我的):

--mirror

指定将refs/(包括但不限于refs/heads/refs/remotes/refs/tags/)下的所有引用镜像到远程存储库,而不是命名每个要推送的引用。新创建的本地 refs 将被推送到远端,本地更新的 refs 将在远端强制更新,已删除的 refs 将从远端移除

【讨论】:

    【解决方案2】:

    你可以像这样从远程仓库中删除一个分支

    git push origin :branchname
    

    如果你有任何标签,你可以像这样删除它们:

    git push origin :refs/tags/tagname
    

    这是假设你有一个远程设置到 github,称为 origin

    不过,这会将本地标签/分支留在您的计算机上。

    【讨论】:

    • 它不允许我删除主分支。有没有办法可以删除里面的所有文件?
    • 您可以在本地创建一个空分支(git branch cleanerbranch,删除其中的所有文件,然后提交),然后将其推送到远程git push origin cleanerbranch:master
    • 不过,假设git branch cleanerbranchmaster 上运行,那仍然会有历史记录。 OP 必须做类似GitHub's advice for creating a gh-pages branch at a new, empty, root commit 然后git push -f origin gh-pages:master
    • @Mark:或者只是创建一个新的存储库,初始提交您想要的任何内容(如果需要,不包括任何内容),然后推送该 repo 的主分支。完成。
    • @Jefromi:是的,容易多了:)
    【解决方案3】:

    这就是我所做的

    git rm -r -f -q

    git 提交

    git 推送

    然后你必须手动删除文件, git rm 从 repo 中删除文件,而不是从文件系统中删除文件

    【讨论】:

    • 这不会删除 git 历史记录!
    【解决方案4】:

    简单的解决方案

    1. 在新目录中使用git init 创建一个空的存储库。
    2. git remote add origin &lt;url-to-remote&gt;
    3. 如果远程服务器是githubgit checkout -b main
    4. git push origin --mirror

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 2013-08-09
      • 2011-05-29
      • 2011-10-16
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多