在Git中查看已删除的文件


104

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

Answers:


144
git show HEAD^:path/to/file

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


6
请注意,这path/to/file是从项目顶部(存储库顶部dir)开始的完整路径。
2009年

1
我有fatal: Invalid object name 'HEAD^'.(我不得不提,我只有“初始提交”)
vladkras 16-10-26

1
如果删除是分阶段执行但未提交,则使用HEAD代替HEAD ^(因为它存在于HEAD中)。例如,我以为我需要文件,因此我添加了文件并致力于保存我的工作,然后在我提出其他解决方案时将其删除。为了在再次提交之前查看原始文件,我在git show HEAD:path / to / file上做了显示
Tony Wickham'Mar

1
我认为也值得一提的是,这仅在文件在最近一次提交中被删除时才有效。如果文件是在几次提交之前删除的,则需要使用其他答案之一。
jayhendren

50

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

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

rev-list调用看重的修订foo,但只列出了一个。由于rev-list列出的时间顺序相反,因此列出的是上次更改的修订,foo即删除的提交foo。(这是基于git不允许更改已删除文件而仍保持删除的假设。)您不能仅使用按原样rev-list返回的修订版,因为该版本不再存在。您必须在它之前请求一个文件,该文件包含文件的最新版本,因此包含in 。foo^git show


2
您可能需要将最后一个foo更改为./foo。对于不使用bash的用户,请使用“ git rev-list --max-count = 1 --all-foo”获得ID,然后执行ID为“ 524 .. is”的“ git show 5824127a8d99576632a04ac2b5c2344bcf751967:./ foo” ID)
Dror

1
好答案。我必须使用〜而不是^。不知道为什么。如此一来,人们就很清楚了,这里的'foo'必须是git根目录的完整路径。
pedorro'1

**/foo如果您不知道路径,则可以编写(这对rev-list命令有效,但对show命令无效。但是,通过rev-list命令的提交,您就可以找到路径)。
Nickolai

10

由于您可能不记得确切的路径,因此可以从git log获取sha1,然后只需发出

 git cat-file -p <sha1>

5
代表Samuel Slund:查找上面要使用的sha1 sum的一种方法是:git whatchanged --no-abbrev给出类似于git(或svn)日志的输出。
无声的噪音
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.