ChatGPT解决这个技术问题 Extra ChatGPT

如何从 git 存储库中删除目录?

我的 GitHub 存储库中有 2 个目录。我想删除其中一个。如果不删除并重新创建整个存储库,我怎么能做到这一点?

目录中有文件吗?
@Iarsmans:是的 6 个文件。两个目录是相同的,除了一个是大写的,另一个是小写的。
您只需要:git rm -r --cached folder_name

R
Reed

从 git 和本地删除目录

您可以使用两个目录签出“master”;

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 中删除这个目录,而不是从文件系统(本地)中完全删除它

在这种情况下使用:

git rm -r --cached myFolder

我有同样的确切情况。当我尝试 git rm -r myFolder 时,它起作用了,但也从“MyFolder”目录中删除了所有内容。必须还原“MyFolder”目录中的所有内容,然后提交。
@Justin 要仅从 git 中删除并保持文件系统不变,请使用 git rm -r --cached myFolder
我得到的错误消息是:致命:pathspec 'directory' 与任何文件都不匹配。
@user2441441 当我试图删除一个根本没有添加到 repo 的文件夹/文件时,我弹出了这个错误
git rm -r --cached directory/仅从 git tracked 中删除,但存储库结构仍然存在。
S
Suresh Karia

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

删除目录的步骤

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

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

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

.gitignore 文件看起来像这样

/FolderName

https://i.stack.imgur.com/mJYfF.png


您还需要在您的另一台计算机上执行 git rm -r --cached FolderName git commit -m "Removed folder from repository",然后进行拉取以保持同步。
这会从添加到存储库的位置到现在删除目录吗?还是只是删除目录并将其重新提交到 .git 存储库?
为什么不只做一个 rm -rf FolderName; git add -A; git commit -m 'removed FolderName
做得好。在我的机器上,第三步不起作用。但是如果改成 $git push 就可以了
对我来说不幸:robdavisprojects@Robs-MacBook-Air 默认 % ls default.services.yml drushrc.php settings.ddev.php default.settings.php 文件 settings.php robdavisprojects@Robs-MacBook-Air 默认 % git rm -r - -cached files fatal: pathspec 'files' 不匹配任何文件 robdavisprojects@Robs-MacBook-Air default %
s
sophros

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


这对我有用。你能解释一下 -A 论点吗?
@Arun -A 是 --all 的缩写,并添加所有已跟踪和未跟踪文件的更改
'origin' 似乎不是 git 存储库
B
Breen ho

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

它将强制删除目录。


这也将从本地目录中删除
m
marc_s

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

我做了以下事情:

将文件夹添加到 .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

从旧提交中删除 refs:

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

确保完全删除所有旧 refs

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 中删除,但并未从本地磁盘中删除。


C
Community

如果您删除目录中的文件(使用 git rm 作为其他答案的解释),那么就 git 而言,该目录不再存在。您不能提交一个空目录,也不能删除一个。

这与你必须显式 svn rm emptyfolder/ 的颠覆不同,这也是为什么 git 的 man 页面将自己描述为“愚蠢的内容跟踪器”的原因

"How do I add an empty directory to a git repository" 的答案链接到 FAQ on this subject

目前 git 索引(暂存区)的设计只允许列出文件,并且没有足够能力进行更改以允许空目录的人足够关心这种情况来补救它。在目录中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库中,并且不会自行跟踪。你可以说“git add

”,它会在那里添加文件。如果您确实需要一个目录存在于结帐中,您应该在其中创建一个文件。 .gitignore 很适合这个目的;您可以将其留空,或填写您希望在目录中显示的文件的名称。


a
anky

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

删除目录后通过以下方式提交更改: git commit -m "Your Commit Message"

然后只需将更改推送到远程 GIT 目录: git push origin


R
Ridha Rezzag

用于删除空文件夹

我想删除我创建的一个空目录(文件夹),git 无法删除它,经过一些研究我了解到 Git 不会跟踪空目录。如果你的工作树中有一个空目录,你应该简单地删除它

rm -r folderName

无需涉及 Git。


S
Shrikant

可以在本地删除文件夹,然后push,如下:

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

e
ettanany

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

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

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


S
Sergey Groshev

您可以使用 Attlasian 源代码树 (Windows) (https://www.atlassian.com/software/sourcetree/overview)。只需从树中选择文件并按下顶部的“删除”按钮。文件将从本地存储库和本地 git 数据库中删除。然后提交,然后推送。


t
thanh.h.le

我的一位同事提出了我认为强大的 BFG Repo-Cleaner。它不仅可以删除不需要的数据,还可以从任何相关的提交信息中清除您的存储库。


Z
Zeus

第一个 git 命令需要在删除任何内容之前知道你是谁

git init git config user.name "someone" git config user.email "someone@someplace.com" git rm -r git commit -m "deleting dir" git push origin master


M
Martin Zeitler

添加新目录:

mkdir <YOUR-DIRECTORY>

但是现在 Git 不知道这个新目录,因为 Git 跟踪文件而不是目录 DIRECTORY

git status

Git 不会知道我们所做的更改,因此我们添加隐藏的 .keep 文件以使 Git 知道此新更改。

touch /YOUR-directory/.keep

现在,如果你点击 git status,Git 就会知道这些变化。

如果要删除目录,则应使用此命令。

rm -r <YOUR-DIRECTORY>

如果您使用 git status 检查,您将看到该目录已被删除。


u
user3821178

2个答案的组合对我有用

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

如果仍然显示一些警告,请手动删除文件

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push