How to remove a directory from git repository?
我的Github存储库中有2个目录。我想删除其中一个。如何在不删除和重新创建整个存储库的情况下做到这一点?
从Git和本地删除目录
您可以使用两个目录签出"master";
1 2 3 | 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中删除这个目录,而不是从文件系统(本地)中完全删除它。
在这种情况下,使用:
1 | git rm -r --cached myFolder |
要只从Git存储库而不是本地删除文件夹/目录,请尝试3个简单命令。
删除目录的步骤
1 2 3 | git rm -r --cached FolderName git commit -m"Removed folder from repository" git push origin master |
在下一次提交中忽略该文件夹的步骤
To ignore that folder from next commits make one file in root named .gitignore
and put that folders name into it. You can put as many as you want
.gitignore文件将如下所示
1 | /FolderName |
如果由于某种原因,Karmakaze所说的不起作用,您可以尝试删除您想要使用的目录或使用文件系统浏览器(例如在Windows文件资源管理器中)。删除目录后,发出命令:
您可以尝试以下操作:
它将强制删除目录。
如果删除目录中的文件(其他答案解释为使用EDOCX1[3]),那么就git而言,该目录将不再存在。不能提交空目录,也不能删除一个空目录。
这与颠覆不同,你必须明确地使用
有关"如何将空目录添加到Git存储库"的回答链接到有关此主题的常见问题解答:
Currently the design of the git index
(staging area) only permits files to
be listed, and nobody competent enough
to make the change to allow empty
directories has cared enough about
this situation to remedy it.Directories are added automatically
when adding files inside them. That
is, directories never have to be added
to the repository, and are not tracked
on their own.You can say"
git add " and it
will add files in there.If you really need a directory to
exist in checkouts you should create a
file in it. .gitignore works well for
this purpose; you can leave it empty,
or fill in the names of files you
expect to show up in the directory.
转到git目录,然后键入以下命令:rm-rf<目录名>
删除目录后,通过以下方式提交更改:git commit-m"您的提交消息"
然后只需在远程git目录上推送更改:git push origin
我通常使用
1 2 3 4 | rm -r folder_name git add --all git commit -m"some comment" git push origin master |
您可以在本地删除文件夹,然后按如下所示推送:
1 2 3 | git rm -r folder_name git commit -m"your commit" git push origin master |
用于删除空文件夹
我想删除一个我创建的空目录(文件夹),Git不能删除它,经过一些研究,我学会了Git不跟踪空目录。如果您的工作树中有一个空目录,那么只需使用
1 | rm -r folderName |
不需要涉及git。
您可以使用Attrasian源树(Windows)(https://www.atlassian.com/software/source tree/overview)。只需从树中选择文件并按下顶部的"删除"按钮。文件将从本地存储库和本地Git数据库中删除。然后提交,然后推。
要添加新目录:
1 | mkdir <YOUR-DIRECTORY> |
但是现在Git不知道这个新目录,因为Git跟踪文件而不是目录目录
1 | git status |
Git不会注意到我们所做的更改,所以我们添加了隐藏的
1 | touch /YOUR-directory/.keep |
现在,如果你点击
如果你想删除这个目录,你应该使用这个命令。
1 | rm -r <YOUR-DIRECTORY> |
如果使用
在删除任何内容之前,第一个git命令需要知道您是谁。
我的一个同事建议使用我认为很有效的bfg repo清洁剂。它不仅可以删除不需要的数据,还可以从任何相关提交信息中清除存储库。
我以前已经提交过该文件夹,并希望删除历史记录中的目录。
我做了以下工作:
将文件夹添加到
1 | echo Folder_Name/ >> .gitignore |
从所有提交中删除:
1 | git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all |
从旧提交中删除引用:
1 | git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d |
确保所有旧的参考完全删除
1 | rm -Rf .git/logs .git/refs/original |
执行垃圾收集
1 | git gc --prune=all --aggressive |
将更改推送到联机存储库:
1 | git push |
你在这里完成了。
但您可以使用以下命令将所有更改推送到所有分支:但是小心这个命令!
1 2 | git push origin --all --force git push origin --tags --force |
之后,文件夹从Git中删除,但没有从本地磁盘中删除。