我用Git删除了一个文件,然后提交了,所以这个文件不再在我的工作副本中。我想查看该文件的内容,但不想实际还原它。我该怎么做?
kx5bkwkv1#
git show HEAD^:path/to/file
您可以使用显式提交标识符或HEAD~n来查看旧版本,或者自删除后是否有多个提交。
HEAD~n
wa7juj8i2#
如果这是一个您已经删除了一段时间的文件,并且不想搜索修订版本,您可以使用(在本例中,该文件名为foo;可以使用完整路径):
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中的^。
rev-list
git show
^
pqwbnv8z3#
由于您可能记不起确切的路径,您可以从git日志中获取sha1,然后您可以简单地发出
git cat-file -p <sha1>
vecaoik14#
这里有一种方法可以找到很久以前删除的文件,即使你不记得确切的名称和/或路径:git log --stat=1000 --full-history -- "**/*partial_file_name*.*"
git log --stat=1000 --full-history -- "**/*partial_file_name*.*"
--stat=1000
1000
--full-history
这样,您还可以通过扫描消息和历史记录来搜索特定提交中的特定文件版本。使用提交散列,您可以使用以下命令查看文件:git show COMMIT_HASH:entire/relative/path/to/deleted_file_name.ext获取正确的相对路径很重要,否则git会告诉你它找不到该路径。此外,你必须在实际的文件删除提交之前使用提交哈希,这将没有任何内容,因为git show显示了该提交中文件的版本。
git show COMMIT_HASH:entire/relative/path/to/deleted_file_name.ext
4条答案
按热度按时间kx5bkwkv1#
您可以使用显式提交标识符或
HEAD~n
来查看旧版本,或者自删除后是否有多个提交。wa7juj8i2#
如果这是一个您已经删除了一段时间的文件,并且不想搜索修订版本,您可以使用(在本例中,该文件名为
foo
;可以使用完整路径):rev-list
调用查找foo
的所有修订版本,但只列出一个。由于rev-list
是按时间倒序列出的,所以它列出的是最后一个修改foo
的版本,也就是删除foo
的提交。(这是基于这样的假设:git不允许修改已删除的文件,但仍 * 保持 * 已删除状态。)你不能只使用rev-list
返回的修订版本as-is,因为foo
已经不存在了。您必须要求它之前的一个包含文件的最后一个修订版本,因此git show
中的^
。pqwbnv8z3#
由于您可能记不起确切的路径,您可以从git日志中获取sha1,然后您可以简单地发出
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
显示了该提交中文件的版本。