在Git中查看已删除的文件

Col*_*say 99 git

我已经使用Git删除了一个文件然后提交,因此该文件不再在我的工作副本中.我想查看该文件的内容,但实际上并没有恢复它.我怎样才能做到这一点?

CB *_*ley 139

git show HEAD^:path/to/file
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,`path/to/file`是从项目顶部(存储库的顶部目录)的完整路径. (6认同)
  • 我认为还值得一提的是,只有当文件在最近的提交中被删除时,这才有效。如果文件在几次提交前被删除,您将需要使用其他答案之一。 (3认同)
  • 我有 `fatal: Invalid object name 'HEAD^'.`(我不得不提一下,我只有“初始提交”) (2认同)

Lou*_*uis 47

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

git show $(git rev-list --max-count=1 --all -- foo)^:foo
Run Code Online (Sandbox Code Playgroud)

rev-list调用查找的所有修订foo,但只列出一个.由于rev-list列表按时间倒序排列,因此它列出的是最后一个更改的修订版本,foo即删除的提交foo.(这是基于git不允许更改已删除文件但仍保持删除的假设.)您不能只使用按原样rev-list返回的修订,因为那里不再存在.你必须要求它之前的那个包含文件的最后一个版本,因此在.foo^git show

  • 您可能需要将最后一个 foo 更改为 ./foo。对于不使用 bash 的他们,使用“git rev-list --max-count=1 --all -- foo”获取 id,然后使用 id 执行“git show 5824127a8d99576632a04ac2b5c2344bcf751967:./foo”(524..身份证) (2认同)

pde*_*hen 9

由于你可能不记得确切的路径,你可以从git log获取sha1然后你可以简单地发出

 git cat-file -p <sha1>
Run Code Online (Sandbox Code Playgroud)

  • 代表[Samuel Slund](http://stackoverflow.com/review/suggested-edits/2993006):找到上面使用的sha1总和的一种方法是:`git whatchanged --no-abbrev`给出类似的输出到git(或svn)日志. (4认同)