从代码库中删除文件但保留本地文件。

468

我有一个文件夹,我希望在我的远程代码库中将其删除。我想要删除它,但是在计算机中保留该文件夹。


请在撰写问题时查看建议的相关问题-重复的问题可能是前两个之一。 - Cascabel
另一个重复的问题:https://dev59.com/C3M_5IYBdhLWcg3wslRW - Cascabel
4
可能是从Git仓库中删除文件但不从本地文件系统中删除它的重复问题。 - Michael Freidgeim
2个回答

817
git rm --cached -r somedir

将目录标记为删除,但不会影响磁盘上的任何内容。这也适用于文件,例如:

git rm --cached somefile.ext

之后你可能需要将somedir/somefile.ext添加到你的.gitignore文件中,这样git就不会再试图添加它们了。


35
将这条路径添加到.gitignore文件中,这样Git就不会尝试让你在以后将它添加进来了。 - grossvogel
4
他从远程拉取时,这会导致目录中的文件被删除吗? - bstpierre
不会在他拉取代码时删除文件;在合并过程中,这些文件将保留在本地。之后,推送操作将导致服务器端的这些文件被删除。 - Walter Mundt
8
如果我有第三个远程仓库的话,那会发生什么?在未来更新时,相应的文件会被删除吗?我问这个问题是因为我觉得这是一个常见的使用情况,即将一些文件提交到仓库中,后来意识到它们在不同的远程仓库之间有所区别,有充分的理由存在,并且本来就不应该在仓库中,想通过保持所有本地副本的准确性来解决这个问题,但将文件从仓库中删除。 - Bobby Jack
8
对于单个文件,您可以执行 git rm --cached path/to/file - Travis Reeder
@BobbyJack,在进行git pull操作时,第三个远程库中的文件将被删除。(我已经验证过了。) - Jantar88

4

我只需要:

  • 将文件夹移出您的工作树
  • git rm 文件夹,提交更改
  • 添加到 .gitignore (或者 .git/info/excludes),提交更改
  • 将文件夹移回

14
这不是一个好的解决方案 - 如果你有一个非常大的目录,会怎样? - ioleo
可能需要使用 git rm -r 命令。 - theUtherSide
1
@loostro 只要不将它移动到另一个块设备上即可。大多数文件系统只会更新文件的 inode,而不是真正移动整个目录。 - 648trindade
这是一个“安全”的答案,如果你对使用 git rm --cached 不够自信或不太信任 git 的话...(这是可以理解的,因为使用 git 很容易搞砸事情)。你可以在一个测试目录中尝试 git rm --cached 来增加对它的信心/信任...但是,至少这个方法是有效的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接