git rm会删除文件的所有历史记录吗?

时间:2012-03-24 02:17:54

标签: git rm

我的项目有一个我一直在使用的文件foo并使用git签到。我刚做了一些重构,所以我根本不再需要这个文件。如果我git rm foo,该文件是否仍然存在于较旧的提交中?我能查看较旧的提交并使用该文件吗?

3 个答案:

答案 0 :(得分:22)

不,git rm(加上提交)写入反映文件不再存在的新树。历史记录中包含文件的整个历史记录,包括创建,修改和最终删除。

答案 1 :(得分:6)

不,git rm只会从工作目录中删除该文件,并将该删除添加到索引中。因此,只有未来的提交会受到影响。所有以前的提交保持不变,并且当您从存储库中删除文件时,历史记录将实际显示。

通常,您之前提交的所有提交都是永久性的,因此您永远不必担心在历史记录中的某个位置丢失提交。当然,有一些东西可以删除或改变以前的提交(比如变基),但对于你做的大多数事情,你都很安全。

答案 2 :(得分:5)

  1. 您可以使用已知的提交ID签出任何旧版本,并且所有状态都属于它,包括现在删除的文件。参见例如git branch< branchname> <开始点>其中start-point是提交ID。您甚至不应该跟踪该起点属于当前分支;提交ID应该是唯一的,因此它可以位于当前存储库已知的任何分支中。

  2. 您可以使用log命令检查文件的先前历史记录;但它不能用任何语法 - 对于1.7.7我将发出“git log - oldpath”而不是简单的“git log oldpath”,因为否则它无法区分路径和修订版。对于其他一些“责备”的命令,即使这还不够 - 人们应该检查旧版本以启动它。