我什么时候应该使用rm,git rm,git rm --cached,git add

时间:2016-05-17 14:56:38

标签: git

我正在学习git,但我对不同的登台和提交文件的方式感到困惑。为了解决这个问题,我正在使用目录的比喻:工作目录,登台目录,提交目录。

  • 如果我rm来自我的工作目录的文件,它只会从我的工作目录中删除它 。这是正确的吗?
  • 如果我git rm来自我的工作目录的文件,它会将其全部删除 三个目录。正确的吗?
  • 如果我git rm --cached一个文件,它将从我的暂存中删除该文件 并提交目录,但将其保留在我的工作目录中?
  • 如果我已经更新,添加和删除了我工作中的文件 目录,并执行git add .,然后git status显示具有的暂存文件 已添加,删除和更新。我承诺会发生什么?是的 从Commit目录中删除已删除的文件?如果我回滚 稍后提交,那些被删除的文件会重新出现吗?

任何有助于更好地理解这些概念的帮助都会受到赞赏 - 谢谢!

1 个答案:

答案 0 :(得分:20)

调整您对暂存区域(也称为索引或缓存)和--cached选项的理解。 documentation for git rm

--cached
     

使用此选项仅从索引中取消暂存和删除路径。无论是否修改了工作树文件,都将保持不变。

向下运行列表

  • rm file - 仅从工作目录中删除文件
  • git rm - 从工作目录和登台区域删除文件,但尚未成为历史记录的一部分(存储库,“提交目录”)
  • git rm --cached - 从暂存区域删除,但不删除工作目录和历史记录
  • git add .存在修改,新文件和删除的文件 - git将在缓存中记录修改和新的未签名文件。 (git add对某些选项的行为会有所不同。)

各种git命令的--cached选项使它们对索引起作用或至少对索引起作用。

git addgit rm从工作目录更改为索引或缓存。将这些命令视为一次构建下一个提交。

在您对索引中的内容感到满意后,使用git commit将更改从索引移至存储库。

大多数情况下,您想要的是简单的序列git rm file,然后git commit停止在历史记录中的当前位置跟踪文件