git add * 命令不会添加已删除的文件。

17

我有一个本地目录,其中我已经初始化了git。我使用以下命令将该目录中的所有文件添加到git:

git add *

现在,如果我手动从本地目录中删除文件,我希望也能够从 GitHub 中删除它。我尝试过

git add -A *

但这并不起作用。每次我都必须手动从GitHub中删除它。


我做你尝试的事情没有问题。对我来说 git add -A 或者 git add -A * (或者是相同的命令 git add --all )都会检测到被删除的文件。你能展示更多信息吗?(并展示你的 git 版本)你可以在删除文件前后以及执行 git add -A 命令后执行 git status 吗?这样我们就可以看到发生了什么。 - code_fodder
1
git status的作用是什么?在使用git status之后它会起作用。非常感谢:D - Nur Imtiazul Haque
1
明白了。git status会列出所有已添加到暂存区的准备提交的文件以及Git当前未跟踪的文件。使用此命令来查看您的工作目录和暂存区的状态。 - Nur Imtiazul Haque
git status 可能是输入为 git status 的最有用的命令之一 - 它告诉您状态是什么,好吧...例如,如果您执行 git add * 并添加了 3 个文件,然后执行 git status,它将列出这三个已添加的文件... - code_fodder
5个回答

22
问题在于glob通配符 (*) 是由你的shell扩展的,而不是由git扩展的,shell并不知道你已经删除的文件。如果使用git add -A指令且没有其他参数,则会添加所有文件,包括已删除的文件。在当前的git版本中,git add .也会这样操作。你也可以像其他答案建议的那样使用git rm --cached <file>来处理单个文件。
通常最简单的方法是使用git rm来删除文件,因为这将同时删除文件并将其加入暂存区。

4
你应该使用 "git rm" 命令。
git rm /path/to/file 例如:进入你的 git 目录并输入
git rm file.txt
然后提交 git commit,例如:
git commit -m "Removing file"
最后将更改推送到 git 存储库。一旦你推送这些更改,文件就会从存储库中删除。
这个早期的 stack overflow 帖子提供了更多信息: Git: why the file deletion does not sync? 希望这可以帮助你!

更多信息请参见:https://dev59.com/GnHYa4cB1Zd3GeqPQM8H - paratrooper

1
如果您想从索引中删除文件,则应使用
git rm filename

文档可以在这里找到:https://git-scm.com/docs/git-rm

这个命令的一个重要注意事项是:

git rm不会仅从您的工作目录中删除文件。(没有选项可以仅从工作树中删除文件并将其保留在索引中;如果您想这样做,请使用/bin/rm。)

如果有效,请告诉我!


2
我知道这个。实际上,我想要一个命令,可以将我的本地目录与git同步。就像 git add -A * 可以同步github和git的已删除和已添加的文件和目录一样。 - Nur Imtiazul Haque

1

唯一需要做的是,当从本地存储库中删除文件时,不要手动删除文件,而是使用,

git rm <file-name>

或者

git rm -rf <folder-name>

之后,在本地提交更改并推送。这应该会反映在本地和远程存储库中。


或者如果您已经手动删除了本地存储库中的文件,现在想要从远程存储库中删除,可以使用--cached属性。也就是说,

git rm --cached <file-name>

或者

git rm -rf --cached <folder-name>

现在如果您已经手动删除了文件,并希望在本地和远程 Git 存储库中反映出来,请使用以下命令:

git add -u .

希望这能有所帮助!:)

2
你没有理解我的意思。我想手动从本地目录中删除文件,然后将git与本地仓库同步。我不想在git中也手动删除每个文件。有这样的方法吗? - Nur Imtiazul Haque
2
@NurImtiazulHaque 请尝试使用 git add -u .,这应该可以解决你的问题。 - bharadhwaj
2
谢谢,这很有帮助。但是我知道 git add -A 命令可以同时完成两个操作。 - Nur Imtiazul Haque
1
@NurImtiazulHaque 是的,它确实有所不同。这取决于情况。要了解更多信息,请阅读https://dev59.com/lHRB5IYBdhLWcg3wn4UL - bharadhwaj

0

对于大多数情况,我总是使用git add -A .

请注意,.表示当前目录。这将添加该目录或其子目录中的所有更改,包括所有已删除的文件,但不包括父目录中的文件(这在某些情况下会导致问题)。

我将此添加到旧答案中,因为我没有看到有人建议过这种方法。


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