如何从Git存储库中删除包含文件的单个目录?
用两个目录签出'master':
git rm -r one-of-the-directories // This deletes from filesystemgit commit . -m "Remove duplicated directory"git push origin <your-git-branch> (typically 'master', but not always)
要从Git中删除此目录,但不从文件系统(本地)中完全删除它:
git rm -r --cached myFolder
如果由于某种原因,karmakaze所说的不起作用,您可以尝试使用或使用文件系统浏览器(例如在Windows文件资源管理器中)删除您想要的目录。删除目录后,发出命令:git add -A然后git commit -m 'deleting directory'然后git push origin master.
git add -A
git commit -m 'deleting directory'
git push origin master
如果您删除目录中的文件(其他答案解释为git rm),则就git而言,该目录不再存在。您不能提交空目录,也不能删除一个。
git rm
这与你必须显式svn rm emptyfolder/的subversion不同,顺便说一句,为什么man的git页面将自己描述为“愚蠢的内容跟踪器”
svn rm emptyfolder/
man
关于“如何将空目录添加到git存储库”的答案链接到关于此主题的FAQ:
目前git索引的设计(暂存区)只允许文件被列入名单,没有人有足够的能力进行更改以允许空目录已经足够关心#36825;来弥补这一点 自动添加目录在其中添加文件时。那就是永远不需要添加目录到存储库,并且没有被跟踪靠自己 你可以说"git add <dir>"将在那里添加文件。 如果你真的需要一个目录存在于结帐中,您应该创建一个文件在其中。. gitignore适用于这个目的;你可以让它空着,或填写您的文件名希望在目录中显示。
目前git索引的设计(暂存区)只允许文件被列入名单,没有人有足够的能力进行更改以允许空目录已经足够关心#36825;来弥补这一点
自动添加目录在其中添加文件时。那就是永远不需要添加目录到存储库,并且没有被跟踪靠自己
你可以说"git add <dir>"将在那里添加文件。
git add <dir>
如果你真的需要一个目录存在于结帐中,您应该创建一个文件在其中。. gitignore适用于这个目的;你可以让它空着,或填写您的文件名希望在目录中显示。
你可以试试这个:git rm -rf <directory_name>
git rm -rf <directory_name>
它将强制删除目录。
删除目录的步骤
git rm -r --cached FolderNamegit commit -m "Removed folder from repository"git push origin master
在下一次提交中忽略该文件夹的步骤
要从下一次提交中忽略该文件夹,请在根文件夹(git初始化的主项目目录)中创建一个名为. gitignore的文件并将该文件夹名称放入其中。您可以忽略任意数量的文件/文件夹
. gitignore文件看起来像这样
/FolderName
您可以使用Atlasian Source Tree(Windows)(https://www.atlassian.com/software/sourcetree/overview)。只需从树中选择文件并按下顶部的“删除”按钮。文件将从本地存储库和本地git数据库中删除。然后提交,然后推送。
您可以在本地删除该文件夹,然后推送,如下所示:
git rm -r folder_namegit commit -m "your commit"git push origin master
转到您的git目录,然后键入以下命令:rm-rf<目录名称><目录名称>
删除目录后,通过以下方式提交更改:git提交-m"你的提交消息"
然后只需将更改推送到远程GIT目录:git推送源<分支机构名称>
我通常使用git add --all从远程存储库中删除文件/文件夹
git add --all
rm -r folder_namegit add --allgit commit -m "some comment"git push origin master
master可以被存储库的任何其他分支替换。
master
我的一位同事建议BFG回收清洁剂,我认为它很强大。它不仅删除不需要的数据,还从任何相关的提交信息中清理您的存储库。
第一个git命令需要在删除任何东西之前知道你是谁
添加新目录:
mkdir <YOUR-DIRECTORY>
但是现在Git不知道这个新目录,因为Git跟踪文件而不是目录目录
git status
Git不会知道我们所做的更改,因此我们添加了隐藏的.keep文件以使Git知道这个新更改。
.keep
touch /YOUR-directory/.keep
现在,如果你点击git status,Git就会知道这些变化。
如果你想删除目录,你应该使用这个命令。
rm -r <YOUR-DIRECTORY>
如果您使用git status进行检查,您将看到该目录已被删除。
对于删除空文件夹
我想删除我创建的一个空目录(文件夹),git无法删除它,经过一番研究我了解到Git不跟踪空目录。如果您的工作树中有一个空目录,您应该简单地使用
rm -r folderName
没有必要涉及Git。
我之前已经提交了该文件夹,也想删除历史记录中的目录。
我做了以下事情:
将文件夹添加到.gitignore:
.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
从旧提交中删除ref:
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 --forcegit push origin --tags --force
之后,该文件夹从git中删除,但没有从本地磁盘中删除。
这两个答案的组合为我工作
git rm -r one-of-the-directoriesgit commit . -m "Remove duplicated directory"git push
如果它仍然显示一些警告,手动删除文件
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEADgit push
如果你要从GitHub Web应用程序中删除目录,你会发现一个删除选项。但是,之后它会给你正在删除的文件列表,底部有提交选项。请记住提交。否则,目录不会被删除。
参考-https://docs.github.com/en/repositories/working-with-files/managing-files/deleting-files-in-a-repository