Git,提交和推送更改包含已删除文件无法工作

8
通常,当我需要提交我的日常工作时,我使用以下方式:
git add * 
git commit -m "my commit message"
git push origin master

这些命令非常基础。但我注意到,删除的文件并没有从我的远程代码库中删除。实际上,如果我删除一个通用文件"example.txt"(在我的本地文件夹中),在push更改到Github后,该文件仍然存在。
技术上说,使用git add * 命令应该识别已删除的文件,不是吗?那么我怎样才能从我的远程代码库中删除已删除的文件?
谢谢。

下面有一个答案,但我建议您只使用 git status,然后复制/粘贴要提交的文件。这将强制您审查实际正在执行的操作,而不是使用 git add . 进行全盘覆盖。 - Tim Biegeleisen
查看此链接以深入了解git add参数:https://dev59.com/lHRB5IYBdhLWcg3wn4UL - Samuel
3个回答

6

git add 默认不会记录文件的删除操作。使用 --all 参数可以让它查找已删除的文件。

正如 Tim Biegeleisen 建议的那样,值得结合使用 git status 查看工作目录中的更改,然后使用 git add <filename> 逐个添加。这样你就能更清楚地看到并控制要添加到暂存区的内容。你也可以使用 git add <directory> 一次性添加整个目录,或者使用 git add -i 让 git 引导你逐个选择要暂存还是忽略的文件变更。


6

git add * 命令不能追踪已删除的文件,它只包括修改或新增的文件。如果要追踪已删除的文件,您需要使用

$ git add . --all

跟踪所有文件(包括已删除的文件)
参考文献:文档

尝试使用 git status 命令并检查已跟踪的文件。上述方法在文档中被广泛提及,是相当标准的。 - Arpit Solanki
使用 git status 命令,我读到:在主分支上 您的分支是最新的 'origin/master'。 没有要提交的内容,工作树干净。 - Aso Strife
您现在没有要提交的内容。您所有的更改都已经在远程代码仓库中了。如果想尝试这种方法,请进行一些更改或删除文件。然后使用上面的方法进行添加、提交、推送并检查远程代码仓库中的更改。 - Arpit Solanki
1
@ArpitSolanki git add . --all 不会跟踪已删除的文件。它的作用是确保索引与工作树完全匹配。如果工作树中缺少一个文件,则该文件将从索引中删除。默认行为(不带 --all 标志)是仅暂存文件修改和文件创建,而不是删除。 - instantepiphany
是的,如果你使用带有--all选项的add命令,它会这样做。 - Arpit Solanki
显示剩余6条评论

2

并不完全准确,参考这个网址

使用git rm

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

Description:

Remove files from the index, or from the working tree and the index. git 
rm will not remove a file from just your working directory. (There is no 
option to remove a file only from the working tree and yet keep it in the 
index; use /bin/rm if you want to do that.) The files being removed have 
to be identical to the tip of the branch, and no updates to their 
contents can be staged in the index, though that default behavior can be 
overridden with the -f option. When --cached is given, the staged content 
has to match either the tip of the branch or the file on disk, allowing 
the file to be removed from just the index.

这是正确的答案。然而,我感觉@aso可能希望在存储库中没有文件痕迹。它将保留在“历史”中。git rm 然后提交只是更改了该提交(历史记录中的点)的状态 - Thom Parkin
@ThomParkin 你可能想要查看git文档,你会发现rm和add加上--all参数可以用于删除文件并更新到远程仓库。这个链接将会很有帮助:this - Arpit Solanki
1
@ThomParkin 你差不多已经搞定了 - git rm 不会改变文件添加时的提交状态。它在索引/缓存/暂存区中记录文件的删除。然后当你运行 git commit,新提交将从库中删除该文件。但是,你提出了一个很好的观点,即它仍然存在于历史记录中 - 例如,你不想只使用 git rm 命令删除包含密码的文件,因为任何人都可以通过查看父提交来看到该文件。 - instantepiphany

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