我的项目有一个foo
我一直在使用和签入的文件git
。我只是做了一些重构,这样我就不再需要这个文件了。如果我这样做git rm foo
,该文件是否仍存在于较旧的提交中?我是否能够签出较旧的提交并使用该文件?
问问题
10031 次
3 回答
28
不,git rm
(加上提交)写入一个反映文件不再存在的新树。文件的整个历史记录,包括创建、修改和最终删除,都出现在历史记录中。
于 2012-03-24T02:19:16.320 回答
8
不,git rm
只会从工作目录中删除文件并将该删除添加到索引中。所以只有未来的提交会受到影响。所有以前的提交都保持不变,并且当您从存储库中删除文件时,历史实际上会显示出来。
一般来说,您之前所做的所有提交都是永久性的,因此一旦提交在历史记录中的某个位置,您永远不必担心丢失提交。当然,有些事情可以删除或更改以前的提交(例如变基),但是对于您所做的大多数事情,您是非常安全的。
于 2012-03-24T02:21:58.463 回答
5
您将能够使用所有状态属于它的已知提交 ID 签出任何旧版本,包括现在删除的文件。参见例如 git branch <branchname> <start-point> 其中 start-point 是提交 ID。您甚至不应该跟踪起点属于当前分支;提交 ID 应该是唯一的,因此它可以位于当前存储库已知的任何分支中。
您可以使用 log 命令检查文件以前的历史记录;但它不适用于任何语法 - 对于 1.7.7,我将发出“git log -- oldpath”而不是简单的“git log oldpath”,否则它无法区分路径和修订版。对于其他一些作为“责备”的命令,即使这还不够 - 应该检查旧版本以启动它。
于 2012-03-24T14:08:32.520 回答