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

22

我的项目有一个名为foo的文件,我一直在使用并通过git提交。最近我进行了一些重构,所以我不再需要这个文件了。如果我执行git rm foo,旧的提交中文件还会存在吗?我能够检出旧的提交并使用这个文件吗?

3个回答

29

不,git rm(加上提交)会写入一个新的树形结构,反映出该文件已不存在。该文件的整个历史记录,包括创建、修改和最终删除,都存在于历史记录中。


1
git rm --cached 是关于什么的? - Zach Smith

8
不,git rm只会从工作目录中删除文件并将该删除添加到索引中。所以只影响未来的提交。所有以前的提交都保持不变,历史记录实际上会显示您从存储库中删除文件的时间。
一般来说,您之前做的所有提交都是永久的,所以一旦它们在历史记录中,您就不必担心失去提交。当然,有些事情可能会删除或更改先前的提交(如变基),但对于大多数操作,您是相当安全的。

@PHcoDer,我(我认为Daniel也是)回答了问题标题中的问题。因此,git rm不会删除所有历史记录。 - poke

5
  1. 您可以使用已知的提交ID检出任何旧版本,其中包括现在已删除的文件的所有状态。例如,使用git branch <branchname> <start-point>命令,其中start-point是一个提交ID。您甚至不需要跟踪start-point属于当前分支;提交ID应该是唯一的,因此它可以在当前存储库中已知的任何分支中。

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


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