git rm是否删除文件的所有历史记录?
问题描述:
我的项目有一个文件foo
,我一直在使用它并使用git
进行检查。我只是做了一些重构,所以我不再需要该文件。如果我做git rm foo
,该文件是否仍然存在于较旧的提交中?我能否检出一个较旧的提交并使用该文件?git rm是否删除文件的所有历史记录?
答
不,git rm
(加上提交)写入反映文件不再存在的新树。该文件的整个历史记录,包括创建,修改和最终删除都存在于历史记录中。
答
否,git rm
将只从工作目录中删除文件并将该删除添加到索引中。所以只有未来的提交会受到影响。以前的所有提交保持不变,当您从存储库中删除文件时,历史记录将实际显示。
一般来说,您之前提交的所有提交都是永久性的,所以您应该永远不用担心在提交历史记录时丢失提交。当然,有些事情可以删除或更改以前的提交(如rebasing),但对于大多数事情,您都很安全。
答
您将能够使用已知提交ID来检出任何旧版本,其中包含所有状态都属于它,包括现在被删除的文件。见例如git分支<branchname> <起点>其中起点是提交ID。你甚至不应该追踪属于当前分支的那个起点;提交ID应该是唯一的,因此它可以位于当前存储库已知的任何分支中。
您可以使用log命令检查文件的历史记录;但它不适用于任何语法 - 对于1.7.7,我将发布“git log-oldpath”而不是简单的“git log oldpath”,否则它将无法区分路径和修订版本。对于其他一些“责备”的命令,即使这还不够 - 应该检查旧版本以启动它。
第一个字是不是应该是?他问他能否从以前的提交中获取文件?你的意思是说是!对? – PHcoDer 2016-09-02 18:25:26