为什么我需要告诉git我删除了一个文件?

时间:2011-07-28 14:23:46

标签: git change-tracking git-index

我正在建立从已保存的zip文件开发到git的历史记录。我很高兴需要git add .文件到临时区域,以便提交所选文件。到目前为止一切都很好。

但是我现在只是添加第一个(解压缩的)文件集,提交它们,然后删除它们的目录和内容,然后解压缩下一个集合,添加它们并提交,通常使用变体目录名称。

我的理解问题是,我正在进行“非分期更改”显示(Git Gui)导演/文件我删除了一些提交。我知道git会拍摄当前文件的快照,因此不应该有任何已删除的文件。

那么,我最近的提交是否包含那些已删除文件的副本(在他们的树中)?何时/为什么需要使用git rm而不是普通rm(或等效的Windows)?我应该忽略这条消息吗?即是否有关于git如何处理竞争删除的解释&跟踪机制。

2 个答案:

答案 0 :(得分:4)

如果您只是使用rm删除然后提交,那么删除不会被暂存,因此git只会忽略该文件已消失的事实。

如果您希望git识别该文件的删除并相应地更新存储库,则必须git rm一个文件。在您的情况下,git add -A .删除旧版本并解压缩后,将为您提供所需内容。它将所有添加,删除和更改添加到暂存区域。

根据您当前的计划,您确实在存储库中有许多您不想要的文件。最好的办法是重新开始,使用以下策略。

  1. 创建回购
  2. 解压缩文件
  3. git add -A .
  4. git commit
  5. 删除所有文件
  6. 从2
  7. 重复

答案 1 :(得分:1)

您猜对了 - 最近的提交包含了这些已删除文件的副本。

尝试git add -A .,同时删除阶段。

如果你想知道为什么.....因为这是最好使用的临时区域:git有一个“舞台区域”的概念,它允许你只提交部分修改 - 这使分割补丁更容易。