无法 git rm 目录

无法 git rm 目录

我意外地将一个目录添加到了应该提交到 git 的项目列表中。现在,当我尝试运行 git rm dirname 时,我收到错误

rm 'dirname'
fatal: git rm: 'dirname': Is a directory

我尝试了以下命令git rm -rf dirnamegit rm dirname --force,但这些都不起作用。它们都产生了相同的错误消息。

我如何防止 dirname 被提交?

我正在使用 git 版本 1.7.0.4

谢谢

补充笔记

好的,它似乎git rm -rf dirname只在某些条件下有效。我进行了一些测试,通常它可以工作。但是,如果它本身是一个单独控制的 git 存储库,并且其中包含 .git 目录,它将失败。dirname我之所以设置它,是因为dirname它是一个由我的许多项目共享的 git 控制框架。

答案1

除非出现任何权限问题...

git rm --cached -r dirname

这应该从暂存的提交中删除目录。

此时,它应该被取消跟踪,并且最好将其设置为通过以下方式忽略gitignore

答案2

从来没有遇到过这个问题(所以不保证这会起作用和/或不会破坏您的数据 - 最好备份您的存储库!),但有一些选择:


选项 1(如果您尚未在本地提交):

  • git stash您所做的任何有价值的更改。
  • git reset你的树(可能需要做git reset --hard HEAD
  • git unstash您存储的更改并小心地添加/提交它们。

选项 2(如果您尚未在本地提交,或者您已提交但尚未推送到远程):

  • git clone存储库的干净版本
  • 小心地将你的更改复制到那里
  • 小心添加/提交您的更改。

选项 3 (会让你的仓库变得混乱):

  • 将您的错误提交到存储库。
  • 使用以下方法进行清理git rm -r

(如果该目录的内容很大,您显然不想这样做。)

相关内容