更新 git repo 时删除已删除的文件/文件夹

Posted

技术标签:

【中文标题】更新 git repo 时删除已删除的文件/文件夹【英文标题】:Delete deleted files/folder when updating a git repo 【发布时间】:2014-09-06 11:10:22 【问题描述】:

我创建了一个 git repo 并提交了文件/文件夹,一段时间后从我的本地 git 文件夹中删除了一个文件夹并尝试更新 repo 我运行命令 -

git add .
git commit -m "second commit"
git remote add origin https://github.com/trialcode/test.git
git push -u origin master

尽管文件已更新,但已删除的文件夹仍显示在我的 git 存储库中。让我知道我在 git 文件/文件夹更新方面做错了什么。

仅供参考 - 我试过git branch -d folder_to_remove/ 但它抛出一个错误 - error: branch 'folder_to_remove/' not found

【问题讨论】:

重复How to remove a directory in my GitHub repository? 【参考方案1】:

Vijay's answer 可以,但我还想指出一个额外的解决方案。

通常git add 不会将已删除的文件添加到您的暂存区(待提交),所以当您运行时

git add .

您实际上并没有暂存任何已删除的文件。

使用git add 暂存已删除的文件

如果您希望 git add 实际暂存已删除的文件,则必须使用 --update 或 -u 标志:

git add --update
# Or
git add -u

此外,您还可以使用 --all-A 标志,但如果我没记错的话,该标志仅暂存从 Git 2.0 版开始的已删除文件......或类似的东西。另请注意,该标志还将暂存未跟踪的文件,这与 -u 不同,后者仅更新已跟踪的文件:

git add --all
# Or
git add -A

文档

git-add(1) Manual Page

【讨论】:

感谢您提供更多信息 +1【参考方案2】:

Git 将在您的本地 repo 目录中有一个隐藏文件夹 .git/。有关本地存储库的所有内容都将存储在该文件夹中。

所以当你创建一个文件夹并提交时,它将被存储。之后即使你从文件系统中删除文件或文件夹,它也不会被通知到本地 git 存储库。

要通知 git 你已删除文件或文件夹,请使用命令git rm

试试这个

git rm folder_name
git commit -m "removed folder"
git remote add origin https://github.com/trialcode/test.git
git push -u origin master

这里的folder_name 是您要删除的文件名或文件夹名。

【讨论】:

+1 并作为注释 - 我们需要添加 -r 标志以递归删除目录。

以上是关于更新 git repo 时删除已删除的文件/文件夹的主要内容,如果未能解决你的问题,请参考以下文章

GIT-在GIT repo中还原已删除的文件

删除 git repo 中的文件夹? [复制]

在 VSCode 中保存文件会删除 git repo 中的所有跟踪文件

git repo 中的文件都被删除和未跟踪,但它们仍然存在。这怎么可能?

从git中删除文件夹但在已推送时导致存储库错误致命

svn repo 被 git svn 删除和添加?