我的GitHub存储库中有2个目录。我想删除其中一个。如果不删除并重新创建整个存储库,我怎么能这样做呢?
答案 0 :(得分:2007)
你可以用两个目录结账'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 rm -r --cached myFolder
答案 1 :(得分:246)
删除目录的步骤
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交时忽略该文件夹的步骤
要在下次提交时忽略该文件夹,请在根目录中创建一个名为 .gitignore 的文件 并将该文件夹名称放入其中。您可以根据需要添加任意数量
.gitignore 文件将如下所示
/FolderName
答案 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命令需要知道你是谁
答案 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.yml
或 rm -r -f <folder name>
-
强行删除文件夹