【发布时间】:2012-03-24 02:17:53
【问题描述】:
我的项目有一个文件foo,我一直在使用该文件并通过git 签入。我只是做了一些重构,这样我就不再需要这个文件了。如果我这样做git rm foo,该文件是否仍存在于较旧的提交中?我能否签出较旧的提交并使用该文件?
【问题讨论】:
我的项目有一个文件foo,我一直在使用该文件并通过git 签入。我只是做了一些重构,这样我就不再需要这个文件了。如果我这样做git rm foo,该文件是否仍存在于较旧的提交中?我能否签出较旧的提交并使用该文件?
【问题讨论】:
不,git rm(加上提交)写入一个反映文件不再存在的新树。文件的整个历史记录,包括创建、修改和最终删除,都显示在历史记录中。
【讨论】:
git rm --cached怎么样
不,git rm 只会从工作目录中删除文件并将该删除添加到索引中。所以只有未来的提交会受到影响。所有之前的提交都保持不变,当您从存储库中删除文件时,历史实际上会显示。
一般而言,您之前所做的所有提交都是永久性的,因此您永远不必担心一旦提交在历史记录中的某个位置丢失。当然,有些事情可以删除或更改以前的提交(例如变基),但是对于您所做的大多数事情,您是非常安全的。
【讨论】:
您将能够使用所有状态属于它的已知提交 ID 签出任何旧版本,包括现在已删除的文件。参见例如git branch
您可以使用 log 命令查看文件以前的历史记录;但它不适用于任何语法 - 对于 1.7.7,我将发出“git log -- oldpath”而不是简单的“git log oldpath”,否则它无法区分路径和修订版。对于其他一些“责备”的命令,即使这还不够 - 应该检查旧版本以启动它。
【讨论】: