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

问题描述 投票:1046回答:14

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

git github bitbucket delete-file git-bash
14个回答
2076
投票

Remove directory from git and 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)

Remove directory from git but NOT local

正如评论中所提到的,你通常要做的是从git中删除这个目录,但不要完全从文件系统中删除它(本地)

在这种情况下使用:

git rm -r --cached myFolder

2
投票

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


1
投票

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


1
投票

要添加新目录:

mkdir <YOUR-DIRECTORY>

但是现在Git并不知道这个新目录,因为Git保留文件的轨道而不是目录DIRECTORY

git status

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

touch /YOUR-directory/.keep

现在,如果你点击git status,Git会意识到这些变化。

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

rm -r <YOUR-DIRECTORY>

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


0
投票

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

  1. 去初始化
  2. git config user.name“someone”
  3. git config user.email“[email protected]
  4. 去rm -r
  5. git commit -m“删除目录”
  6. git push origin master

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


254
投票

To remove folder/directory only from git repository and not from the local try 3 simple commands.


删除目录的步骤

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

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

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

.gitignore文件将如下所示

/FolderName


71
投票

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


20
投票

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

它会强制删除目录。


16
投票

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

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

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

目前git索引(临时区域)的设计只允许列出文件,没有人能够进行更改以允许空目录已经足够关注这种情况来弥补它。

在其中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库,并且不会自己跟踪。

你可以说“git add <dir>”,它会在那里添加文件。

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


6
投票

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

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

然后只需在远程GIT目录上推送更改:git push origin <Branch name>


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可以被存储库的任何其他分支替换。


4
投票

用于删除空文件夹

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

rm -r folderName

没有必要涉及Git。

© www.soinside.com 2019 - 2024. All rights reserved.