我的GitHub存储库上有2个目录。我想删除其中之一。在不删除并重新创建整个存储库的情况下该如何做?
我的GitHub存储库上有2个目录。我想删除其中之一。在不删除并重新创建整个存储库的情况下该如何做?
Answers:
您可以在两个目录中检出“ 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 rm -r --cached myFolder
git rm -r myFolder
它起作用时,还从“ MyFolder”目录中删除了所有内容。必须还原“ MyFolder”目录中的所有内容,然后提交。
git rm -r --cached myFolder
git rm -r --cached directory/
仅从跟踪的git中删除,但存储库结构保持不变。
删除目录的步骤
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交中忽略该文件夹的步骤
要在下次提交时忽略该文件夹,请在根目录.gitignore中创建一个文件 ,并将该文件夹名称放入其中。你可以放任意多
.gitignore文件将如下所示
/FolderName
如果由于某种原因karmakaze所说的内容不起作用,则可以尝试删除要使用的目录或文件系统浏览器(例如Windows File Explorer)。删除目录后,发出命令:
git add -A
,然后
git commit -m 'deleting directory'
再然后
git push origin master
。
如果删除目录中的文件(git rm
如其他答案所述),那么就git而言,该目录已不存在。您不能提交一个空目录,也不能删除一个目录。
这不像你必须明确地颠覆svn rm emptyfolder/
,并顺带为什么man
对git的页面描述自己是“愚蠢的内容跟踪器”
关于“如何将空目录添加到git存储库”的答案链接到有关此主题的FAQ:
当前,git索引(临时区域)的设计仅允许列出文件,并且没有足够的能力来进行更改以允许空目录的人对此情况已经足够在意,以进行补救。
在目录中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库,也不需要单独跟踪。
您可以说“
git add <dir>
”,它将在其中添加文件。如果您确实需要在结帐中存在目录,则应在其中创建一个文件。.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
从旧提交中删除引用:
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中删除,但未从本地磁盘中删除。
用于删除空文件夹
我想删除我创建的空目录(文件夹),git无法删除它,经过一些研究,我得知Git不会跟踪空目录。如果您的工作树中有一个空目录,则只需使用以下命令将其删除
rm -r folderName
无需参与Git。
您可以使用Attlasian源代码树(Windows)(https://www.atlassian.com/software/sourcetree/overview)。只需从树中选择文件,然后单击顶部的“删除”按钮即可。文件将从本地存储库和本地git数据库中删除。然后提交,然后推动。
我的一位同事建议使用BFG Repo-Cleaner,我认为它功能强大。它不仅可以删除不需要的数据,还可以从任何相关的提交信息中清除您的存储库。