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

Sah*_*bov 1138 git github bitbucket delete-file git-bash

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

kar*_*aze 2141

从git和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)
Run Code Online (Sandbox Code Playgroud)

从git中删除目录但不是本地的

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

在这种情况下使用:

git rm -r --cached myFolder
Run Code Online (Sandbox Code Playgroud)

  • @Justin要只从git中删除并保留文件系统,请使用`git rm -r --cached myFolder` (226认同)
  • 我得到的错误信息是:致命:pathspec'目录'与任何文件都不匹配. (27认同)
  • 我有同样的情况.当我尝试使用`git rm -r myFolder`时,它还可以从"MyFolder"目录中删除所有内容.必须还原"MyFolder"目录中的所有内容然后提交. (8认同)
  • @ user2441441当我尝试删除未添加到回购的文件夹/文件时,我弹出了此错误 (3认同)
  • git rm -r --cached directory /仅从跟踪的git中删除,但存储库结构保持不变。 (2认同)

eir*_*ios 260

仅从git存储库中删除文件夹/目录,而不是从本地尝试3个简单命令.


删除目录的步骤

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Run Code Online (Sandbox Code Playgroud)

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

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

.gitignore文件将如下所示

/FolderName
Run Code Online (Sandbox Code Playgroud)

删除目录

  • 很好的解释,很好的答案 (2认同)

cmc*_*loh 72

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

git push origin master.

  • 这对我有用。您能解释一下-A参数吗? (4认同)
  • @Arun -A 是 --all 的缩写,并添加所有跟踪和未跟踪文件的更改 (2认同)

Bre*_* ho 20

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

它会强制删除目录.

  • 这也将从本地目录中删除 (9认同)

dbr*_*dbr 16

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

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

关于"如何将空目录添加到git存储库"的答案链接到此主题常见问题解答:

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

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

你可以说" git add <dir>",它会在那里添加文件.

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


Sky*_*org 14

我之前已经提交了该文件夹,并且还想删除历史记录中的目录。

我做了以下事情:

将文件夹添加到.gitignore

echo Folder_Name/ >> .gitignore
Run Code Online (Sandbox Code Playgroud)

从所有提交中删除:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

从旧提交中删除引用:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Run Code Online (Sandbox Code Playgroud)

确保完全删除所有旧参考

rm -Rf .git/logs .git/refs/original
Run Code Online (Sandbox Code Playgroud)

执行垃圾收集

git gc --prune=all --aggressive
Run Code Online (Sandbox Code Playgroud)

将您的更改推送到在线存储库:

git push
Run Code Online (Sandbox Code Playgroud)

你在这里完成了。

但是您可以使用以下命令将所有更改推送到所有分支:但要小心此命令!

git push origin --all --force
git push origin --tags --force
Run Code Online (Sandbox Code Playgroud)

之后,该文件夹从 git 中删除,但未从本地磁盘中删除。


小智 6

您可以在本地删除该文件夹,然后push,如下:

git rm -r folder_name
git commit -m "your commit"
git push origin master
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

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


ett*_*any 5

我通常用来git add --all从远程存储库中删除文件/文件夹

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master
Run Code Online (Sandbox Code Playgroud)

master可以被存储库的任何其他分支替换。


Rid*_*zag 5

用于删除空文件夹

我想删除我创建的空目录(文件夹),git无法删除它,经过一些研究,我得知Git不会跟踪空目录。如果您的工作树中有一个空目录,则只需使用以下命令将其删除

rm -r folderName
Run Code Online (Sandbox Code Playgroud)

无需参与Git。


use*_*178 5

两个答案的结合对我有用

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
Run Code Online (Sandbox Code Playgroud)

如果仍然显示一些警告,请手动删除文件

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
Run Code Online (Sandbox Code Playgroud)