乐闻世界logo
搜索文章和话题

Git 如何从存储库中删除某个目录?

2个答案

1
2

当您想要从Git存储库中彻底删除某个目录时,您应该遵循以下步骤:

  1. 删除本地目录: 首先,在您的本地工作副本中,您需要使用文件系统命令来删除目录。例如,在UNIX系统上,您可以使用rm -rf命令:

    sh
    rm -rf <directory_name>
  2. 将更改暂存到Git: 删除了目录后,您需要告诉Git这个变化。为此,您应该使用git add命令将删除操作暂存起来,使用带有-A选项,该选项告诉Git考虑所有变化(包括文件删除):

    sh
    git add -A

    或者,您可以只暂存已删除的目录:

    sh
    git add <directory_name>
  3. 提交更改: 接下来,您需要提交您的更改。提交时应该提供一个合适的消息,说明您进行了哪些更改:

    sh
    git commit -m "Remove <directory_name> from the repository"
  4. 从历史记录中删除: 如果目录在之前的历史记录中不存在,直接提交即可。但如果您希望从历史记录中彻底删除目录(例如,它可能包含敏感数据),您将需要使用更高级的工具,比如git filter-branchBFG Repo-Cleaner

    使用filter-branch

    sh
    git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch -r <directory_name>" \ --prune-empty --tag-name-filter cat -- --all

    使用BFG Repo-Cleaner(一个更快且更容易使用的工具):

    sh
    bfg --delete-folders <directory_name> --no-blob-protection

    请注意,这些操作会重写您的Git历史记录,这可能对其他人的存储库副本产生影响。这种操作应该非常小心地进行,并且确保团队中的每个人都了解这一点。

  5. 推送更改到远程仓库: 一旦您提交了更改(并且如果需要,也清理了历史记录),您需要推送这些更改到远程仓库。如果您修改了历史记录,您可能需要使用--force(或者在Git 2.0和以上版本中使用--force-with-lease)来推送您的更改:

    sh
    git push origin --force --all

    如果您未修改历史记录,正常的推送命令就足够了:

    sh
    git push origin

请记住,在执行这样的操作时,团队中的每个成员都需要知道变更,因为这将影响他们的本地存储库。如果他们有基于被删除目录的未合并工作,可能会遇到冲突。

2024年6月29日 12:07 回复

你可以试试这个: git rm -rf <directory_name>

它将强制删除该目录。

2024年6月29日 12:07 回复

你的答案