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

Jef*_*rey 16 git rm

我的项目有一个foo我一直在使用和登记的文件git.我刚做了一些重构,所以我根本不再需要这个文件.如果我这样做git rm foo,该文件是否仍然存在于较旧的提交中?我能查看较旧的提交并使用该文件吗?

Dan*_*man 24

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


pok*_*oke 7

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

一般来说,您之前提交的所有提交都是永久性的,因此您永远不必担心在历史记录中的某个位置丢失提交.当然,有一些东西可以删除或改变以前的提交(如变基),但对于你做的大多数事情,你是非常安全的.


Net*_*tch 5

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

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