在Git中查看已删除的文件

scyqe7ek  于 2023-05-12  发布在  Git
关注(0)|答案(4)|浏览(314)

我用Git删除了一个文件,然后提交了,所以这个文件不再在我的工作副本中。我想查看该文件的内容,但不想实际还原它。我该怎么做?

kx5bkwkv

kx5bkwkv1#

git show HEAD^:path/to/file

您可以使用显式提交标识符或HEAD~n来查看旧版本,或者自删除后是否有多个提交。

wa7juj8i

wa7juj8i2#

如果这是一个您已经删除了一段时间的文件,并且不想搜索修订版本,您可以使用(在本例中,该文件名为foo;可以使用完整路径):

git show $(git rev-list --max-count=1 --all -- foo)^:foo

rev-list调用查找foo的所有修订版本,但只列出一个。由于rev-list是按时间倒序列出的,所以它列出的是最后一个修改foo的版本,也就是删除foo的提交。(这是基于这样的假设:git不允许修改已删除的文件,但仍 * 保持 * 已删除状态。)你不能只使用rev-list返回的修订版本as-is,因为foo已经不存在了。您必须要求它之前的一个包含文件的最后一个修订版本,因此git show中的^

pqwbnv8z

pqwbnv8z3#

由于您可能记不起确切的路径,您可以从git日志中获取sha1,然后您可以简单地发出

git cat-file -p <sha1>
vecaoik1

vecaoik14#

这里有一种方法可以找到很久以前删除的文件,即使你不记得确切的名称和/或路径:
git log --stat=1000 --full-history -- "**/*partial_file_name*.*"

  • --stat=1000列出了提交中的所有文件。1000确保您将看到已删除文件的完整相对路径https://stackoverflow.com/a/10460154/99717
  • --full-history显示文件的反向提交历史,从删除提交开始。

这样,您还可以通过扫描消息和历史记录来搜索特定提交中的特定文件版本。
使用提交散列,您可以使用以下命令查看文件:
git show COMMIT_HASH:entire/relative/path/to/deleted_file_name.ext
获取正确的相对路径很重要,否则git会告诉你它找不到该路径。此外,你必须在实际的文件删除提交之前使用提交哈希,这将没有任何内容,因为git show显示了该提交中文件的版本。

相关问题