我使用Git删除了一个文件然后进行了提交,因此该文件不再在我的工作副本中。我想查看该文件的内容,但不想实际恢复它。我该如何做?
git show HEAD^:path/to/file
您可以使用明确的提交标识符或HEAD~n
来查看旧版本,如果自您删除以来进行了多次提交。
如果您删除了一段时间并且不想寻找修订版的文件,则可以使用(在此示例中,文件名为foo
,您可以使用完整路径):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
rev-list
命令查找foo
的所有修订版本,但只列出其中一个。由于rev-list
按照时间倒序列出列表,所以它列出的是最后一个更改了foo
的修订版本,也就是删除foo
的提交。 (这基于git不允许已删除的文件被更改但仍保持已删除状态的假设。)您不能直接使用rev-list
返回的修订版本,因为foo
在其中已不存在,您必须请求其之前的修订版本,其中包含该文件的最后一个修订版本,因此在git show
中使用^
。**/foo
(这适用于 rev-list 命令,但不适用于 show 命令。但是,使用来自 rev-list 命令的提交,您可以找到路径)。 - Nickolai^
与 git show
或 git log
不起作用。
必须使用 git log -p
与 ~
才能使其正常工作。 - tamato如果您可能不记得确切的路径,您可以从Git日志中获取sha1值,然后简单地执行:
git cat-file -p <sha1>
git whatchanged --no-abbrev
,它会给出类似于git(或svn)日志的输出。 - artless noise以下是一种方法,即使您不记得确切的名称和/或路径,也可以找到很久以前删除的文件:
git log --stat=1000 --full-history -- "**/*partial_file_name*.*"
--stat=1000
列出提交中的所有文件。 1000
确保您将看到删除文件的整个相对路径(https://dev59.com/DGkv5IYBdhLWcg3wpCQz#10460154)--full-history
显示文件的反向提交历史记录,从删除提交开始。这样,您还可以通过扫描消息和历史记录搜索特定提交中的特定文件版本。
使用提交哈希,您可以查看文件:
git show COMMIT_HASH:entire/relative/path/to/deleted_file_name.ext
正确获取相对路径非常重要,否则Git会告诉您找不到该路径。此外,在实际文件删除提交之前,您必须使用提交哈希值,这将无法显示任何内容,因为 git show
会向您显示该提交中文件的版本。
path/to/file
是从项目顶部(仓库的顶级目录)开始的完整路径。 - Jakub Narębskifatal: Invalid object name 'HEAD^'.
的错误(需要说明的是,我只有一个“Initial commit”)。 - vladkras