Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Git中查看已删除的文件_Git - Fatal编程技术网

在Git中查看已删除的文件

在Git中查看已删除的文件,git,Git,我已经用Git删除了一个文件,然后提交,因此该文件不再在我的工作副本中。我想查看该文件的内容,但不想实际还原它。我该怎么做 git show HEAD^:path/to/file 您可以使用显式提交标识符或HEAD~n查看旧版本,或者如果删除后有多个提交。由于您可能无法调用确切的路径,您可以从git日志中获取sha1,然后只需发出 git cat-file -p <sha1> git cat文件-p 如果这是您不久前删除的文件,并且不想查找修订版,您可以使用(本例中该文件名为f

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

git show HEAD^:path/to/file

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

由于您可能无法调用确切的路径,您可以从git日志中获取sha1,然后只需发出

 git cat-file -p <sha1>
git cat文件-p

如果这是您不久前删除的文件,并且不想查找修订版,您可以使用(本例中该文件名为
foo
;您可以使用完整路径):


rev list
调用查找
foo
的所有修订,但只列出一个。由于
rev list
以相反的时间顺序列出,因此它列出的是更改
foo
的最后一次修订,这将是删除
foo
的提交。(这是基于这样的假设,即git不允许更改已删除的文件,但仍保持删除状态。)您不能仅使用
rev list
按原样返回的修订,因为
foo
不再存在。你必须要求在它前面的那一个包含文件的最新版本,因此
git show

中的
^
注意
path/to/file
是从项目顶部(存储库的顶部目录)开始的完整路径。我得到了
致命:无效的对象名'HEAD^'。
(我必须提到,我只有“初始提交”)如果删除已暂存但未提交,请使用HEAD而不是HEAD^(因为它存在于HEAD中)。例如,我认为我需要文件,所以我添加了它并承诺保存我的工作,然后在我提出另一个解决方案时将其删除。为了在再次提交之前查看原始文件,我做了git show HEAD:path/to/file。我认为还值得一提的是,只有在最近一次提交时删除了该文件,此操作才有效。如果ile在几次提交之前被删除,您需要使用其他答案之一。代表:查找上面要使用的sha1总和的一种方法是:
git whatchanged--no abbrev
,它提供类似于git(或svn)log的输出。您可能需要将最后一个foo更改为./foo。对于不使用bash的用户,请使用“git rev list--max count=1--all--foo“然后做”git show 5824127a8d99576632a04ac2b5c2344bcf751967:./foo”,id是(524..是id)很好的答案。我不得不使用~而不是^。不知道为什么。为了让大家都清楚,这里的“foo”必须是来自git根目录的完整路径。如果不知道路径,可以编写
**/foo
(这将适用于rev list命令,但不适用于show命令。但是,使用rev list命令中的commit,您可以找到路径)。
git show $(git rev-list --max-count=1 --all -- foo)^:foo