如何从 git 仓库中删除目录?

我的 GitHub 存储库上有 2 个目录。我想删除其中之一。如何在不删除并重新创建整个存储库的情况下做到这一点?

答案

从 git 和 local 删除目录

您可以在两个目录中检出 “master”。

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

从 git 中删除目录,但不在本地

如评论中所述,通常要做的是从 git 中删除该目录,而不是从文件系统中完全删除它(本地)

在这种情况下,请使用:

git rm -r --cached myFolder

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


删除目录的步骤

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

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

要在下次提交时忽略该文件夹,请在根目录.gitignore 中创建一个文件,并将该文件夹名称放入其中。你可以放任意多

.gitignore文件将如下所示

/FolderName

删除目录

如果由于某种原因 karmakaze 所说的内容不起作用,则可以尝试删除要使用的目录或文件系统浏览器(例如 Windows File Explorer)。删除目录后,发出命令:
git add -A
接着
git commit -m 'deleting directory'
接着
git push origin master

您可以尝试以下操作: git rm -rf <directory_name>

它将强制删除目录。

如果您删除目录中的文件(其他答案用git rm来说明),那么就 git 而言,该目录已不存在。您不能提交一个空目录,也不能删除一个目录。

这与 Subversion 不同,在 Subversion 中,您必须显式地svn rm emptyfolder/ ,这也是 git man页将自己描述为 “愚蠢的内容跟踪器” 的原因

关于“如何将空目录添加到 git 存储库”的答案链接到有关此主题常见问题解答

当前,git 索引(临时区域)的设计仅允许列出文件,并且没有足够的能力来进行更改以允许空目录的人已经足够在意这种情况以进行纠正。

在目录中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库,也不需要单独跟踪。

您可以说 “ git add <dir> ”,它将在其中添加文件。

如果您确实需要在结帐中存在目录,则应在其中创建一个文件。 .gitignore 为此很好地工作;您可以将其保留为空,或填写您希望在目录中显示的文件名。

用于删除空文件夹

我想删除我创建的空目录(文件夹),git 无法删除它,经过一些研究,我得知 Git 不会跟踪空目录。如果您的工作树中有一个空目录,则只需使用以下命令将其删除

rm -r folderName

无需参与 Git。

转到您的 git 目录,然后键入以下命令: rm -rf < 目录名称 >

删除目录后,通过以下方式提交更改: git commit -m“您的提交消息”

然后只需将更改推送到远程 GIT 目录: git push origin < 分支名称 >

您可以在本地删除该文件夹,然后按如下所示进行推送:

git rm -r folder_name
git commit -m "your commit"
git push origin master

我通常使用git add --all从远程存储库中删除文件 / 文件夹

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master可以由存储库的任何其他分支替换。

我之前已经提交过该文件夹,并且还希望删除历史记录中的目录。

我做了以下工作:

将文件夹添加到.gitignore

echo Folder_Name/ >> .gitignore

从所有提交中删除:

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

从旧提交中删除引用:

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

确保所有旧裁判均已完全删除

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

执行垃圾收集

git gc --prune=all --aggressive

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

git push

您已经完成了。

但是,您可以使用以下命令将所有更改推送到所有分支:但是请谨慎使用此命令!

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

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