2012-03-24 190 views
14

我的项目有一个文件foo,我一直在使用它并使用git进行检查。我只是做了一些重构,所以我不再需要该文件。如果我做git rm foo,该文件是否仍然存在于较旧的提交中?我能否检出一个较旧的提交并使用该文件?git rm是否删除文件的所有历史记录?

回答

19

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

+0

第一个字是不是应该是?他问他能否从以前的提交中获取文件?你的意思是说是!对? – PHcoDer 2016-09-02 18:25:26

6

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

一般来说,您之前提交的所有提交都是永久性的,所以您应该永远不用担心在提交历史记录时丢失提交。当然,有些事情可以删除或更改以前的提交(如rebasing),但对于大多数事情,您都很安全。

+0

第一个词不应该是?他问他能否从以前的提交中获取文件?你的意思是说是!对? – PHcoDer 2016-09-02 18:25:22

+0

@PHC我(我也假设丹尼尔)在问题标题中回答了这个问题。所以,不,git rm不会删除所有的历史记录。 – poke 2016-09-02 18:38:04

5
  1. 您将能够使用已知提交ID来检出任何旧版本,其中包含所有状态都属于它,包括现在被删除的文件。见例如git分支<branchname> <起点>其中起点是提交ID。你甚至不应该追踪属于当前分支的那个起点;提交ID应该是唯一的,因此它可以位于当前存储库已知的任何分支中。

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

相关问题