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

时间:2011-06-10 23:54:53

标签: git github bitbucket delete-file git-bash

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

16 个答案:

答案 0 :(得分:2007)

从git和本地

中删除目录

你可以用两个目录结账'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

答案 1 :(得分:246)

仅从git存储库中删除文件夹/目录,而不是从本地try 3简单命令中删除。


删除目录的步骤

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

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

  

要在下次提交时忽略该文件夹,请在根目录中创建一个名为 .gitignore 的文件   并将该文件夹名称放入其中。您可以根据需要添加任意数量

.gitignore 文件将如下所示

/FolderName

remove directory

答案 2 :(得分:67)

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

答案 3 :(得分:20)

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

它将强制删除目录。

答案 4 :(得分:16)

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

这与你必须明确svn rm emptyfolder/的subversion不同,顺便说一句,为什么git的man页面将自己描述为“愚蠢的内容跟踪器”

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

  

目前设计的git索引   (暂存区)只允许文件到   被列出,并没有人足够胜任   使更改允许为空   目录已经足够关心了   这种情况可以解决它。

     

自动添加目录   在其中添加文件时。那   是的,目录永远不必添加   到存储库,并没有被跟踪   他们自己。

     

您可以说“git add <dir>”   将在那里添加文件。

     

如果你真的需要一个目录   在结帐时你应该创建一个   文件在里面。 .gitignore效果很好   这个目的;你可以把它留空   或填写您的文件名称   期望出现在目录中。

答案 5 :(得分:6)

转到您的git目录,然后键入以下命令: rm -rf&lt; 目录名称&gt;

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

然后只需在远程GIT目录上推送更改: git push origin&lt; 分支机构名称&gt;

答案 6 :(得分:4)

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

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

答案 7 :(得分:4)

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

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

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

答案 8 :(得分:3)

用于删除空文件夹

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

将其删除
rm -r folderName

无需参与Git。

答案 9 :(得分:2)

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

  1. git init
  2. git config user.name&#34;某人&#34;
  3. git config user.email&#34; someone@someplace.com"
  4. git rm -r
  5. git commit -m&#34;删除dir&#34;
  6. git push origin master

答案 12 :(得分:1)

添加新目录:

mkdir <YOUR-DIRECTORY>

但是现在Git并没有意识到这个新目录,因为Git保留了文件的跟踪而不是目录 目录

git status

Git不会意识到我们所做的更改,因此我们添加了隐藏的.keep文件,以便通过这一新变化让Git意识到。

touch /YOUR-directory/.keep

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

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

rm -r <YOUR-DIRECTORY>

如果您使用git status进行了检查,则会看到该目录已被删除。

答案 13 :(得分:0)

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

我做了以下事情:

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

答案 14 :(得分: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

答案 15 :(得分:0)

尝试 docker-compose.ymlrm -r -f <folder name> - 强行删除文件夹