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


Answers:


2321

从git和local删除目录

您可以在两个目录中检出“ 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

8
我也有同样的情况。当我尝试git rm -r myFolder它起作用时,还从“ MyFolder”目录中删除了所有内容。必须还原“ MyFolder”目录中的所有内容,然后提交。
贾斯汀2012年

240
@Justin要仅从git中删除并按原样保留文件系统,请使用git rm -r --cached myFolder
karmakaze 2012年

32
我收到的错误消息是:致命:pathspec“目录”与任何文件都不匹配。
user2441441

3
@ user2441441当我尝试删除根本没有添加到存储库中的文件夹/文件时,我弹出此错误
lukeatdesignworks 2016年

3
git rm -r --cached directory/仅从跟踪的git中删除,但存储库结构保持不变。
内斯托尔·

287

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


删除目录的步骤

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

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

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

.gitignore文件将如下所示

/FolderName

删除目录


1
您还需要在另一台计算机上执行git rm -r --cached FolderName git commit -m“从存储库中删除文件夹”,然后进行拉动以使其保持同步。
西蒙(Simon)

1
从现在添加到存储库的位置开始,这会删除该目录吗?还是只是删除目录并将其重新提交到.git存储库?
alpha_989

1
大!工作!
BeingCoders

2
好解释,好答案
Rakshit Shah

1
做得好。在我的机器上,第三步不起作用。但是,如果将其更改为$ git push,它将起作用
Hong,

82

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


4
这对我有用。您能解释一下-A参数吗?
阿伦(Arun)

2
@Arun -A是--all的缩写,它添加所有已跟踪和未跟踪文件的更改
Joachim Rohde

这对我有用。
UVM

20

您可以尝试以下方法: git rm -rf <directory_name>

它将强制删除目录。


3
这也会从本地目录中删除
Abdul rehman kk

18

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

这不像你必须明确地颠覆svn rm emptyfolder/,并顺带为什么man对git的页面描述自己是“愚蠢的内容跟踪器”

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

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

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

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

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


8

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

我做了以下事情:

将文件夹添加到.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中删除,但未从本地磁盘中删除。


7

用于删除空文件夹

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

rm -r folderName

无需参与Git。


1
谢谢!那正是我所需要的。
SpyrosKo '19

6

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

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

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


4

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

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

4

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

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

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



1

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


1

要添加新目录:

mkdir <YOUR-DIRECTORY>

但是现在Git无法识别这个新目录,因为Git跟踪文件而不是目录DIRECTORY

git status

Git不会知道我们所做的更改,因此我们添加了隐藏.keep文件,以使Git能够通过这一新更改来感知。

touch /YOUR-directory/.keep

现在,如果您点击了git statusGit,将会知道所做的更改。

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

rm -r <YOUR-DIRECTORY>

并且,如果使用进行了检查git status,您将看到目录已被删除。


0

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

  1. git初始化
  2. git config user.name“某人”
  3. git config user.email“ someone@someplace.com”
  4. git rm -r
  5. git commit -m“删除目录”
  6. git push origin master

0

这两个答案结合起来对我有用

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.