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

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

9 个月前提问
5 个月前修改
浏览次数44

6个答案

1
2
3
4
5
6

当您想要从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 和本地删除目录

检查两个目录的“master”:

shell
git rm -r one-of-the-directories // This deletes from filesystem git commit . -m "Remove duplicated directory" git push origin <your-git-branch> (typically 'master', but not always)

从 Git 中删除目录,但不是本地目录

要从 Git 中删除此目录,但不将其从文件系统(本地)中完全删除:

shell
git rm -r --cached myFolder
2024年6月29日 12:07 回复

要仅从 git 存储库而不是从本地删除文件夹/目录,请尝试 3 个简单的命令。


删除目录的步骤

shell
git rm -r --cached FolderName git commit -m "Removed folder from repository" git push origin master

在下次提交中忽略该文件夹的步骤

要在下一次提交中忽略该文件夹,请在根文件夹(初始化 git 的主项目目录)中创建一个名为**.gitignore**的文件 ,并将该文件夹名称放入其中。您可以忽略任意数量的文件/文件夹

.gitignore文件将如下所示

shell
/FolderName

删除目录

2024年6月29日 12:07 回复

如果由于某种原因,karmakaze 所说的不起作用,您可以尝试使用文件系统浏览器(例如,在 Windows 文件资源管理器中)删除想要的目录。删除目录后,发出命令:
git add -A
and then
git commit -m 'deleting directory'
和 then
git push origin master

2024年6月29日 12:07 回复

我之前已经提交了该文件夹,并且也想删除历史记录中的目录。

我做了以下事情:

将文件夹添加到.gitignore

shell
echo Folder_Name/ >> .gitignore

从所有提交中删除:

shell
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

从旧提交中删除引用:

shell
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

确保所有旧的引用被完全删除

shell
rm -Rf .git/logs .git/refs/original

执行垃圾收集

shell
git gc --prune=all --aggressive

将您的更改推送到在线存储库:

shell
git push

你已经完成了。

但是您可以使用以下命令将所有更改推送到所有分支:但是要小心这个命令!

shell
git push origin --all --force git push origin --tags --force

之后该文件夹已从 git 中删除,但并未从本地磁盘中删除。

2024年6月29日 12:07 回复

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

它将强制删除该目录。

2024年6月29日 12:07 回复

你的答案