7

我正在用 git 做一个项目,我知道在过去的某个时间(早在我有代码之前)存在一个名为exec.js. 我想查看这个文件的内容。我知道哪个存储库曾经包含此文件,但我不知道确切的路径。

4

3 回答 3

3

您可以在以下位置使用通配符git log

git log -- *exec.js

exec.js当任何调用的文件被修改时,将为您提供所有日志消息。

一旦你找到删除提交(比如A),你可以

git checkout A -- *exec.js

这将为您带来最新版本的exec.js.

如果要查看 的完整历史记录exec.js,可以使用gitk

gitk -- *exec.js

这将再次向您显示所有修改。如果您对某个提交特别感兴趣,可以右键单击gitk对话框中的文件,然后选择external diff tool。这将打开带有完整文件的外部差异工具,而不仅仅是补丁。

于 2012-08-07T12:48:39.820 回答
1

您可以使用以下命令在日志历史记录中搜索该特定文件 -

如果你没有文件路径,那么

git log --diff-filter=D --summary | grep filename

如果你有文件路径,那么你可以使用 -

git log -- filepath
git log -n 1 -- filepath

一旦获得修订版,您就可以签出该特定修订版以获取该文件

于 2012-08-07T11:55:48.477 回答
0

没有简单的方法可以在一两个命令中列出已删除文件的全名及其内容。但是,这里有一个别名可以帮助您入门:

$ git config --global alias.find-deleted-file '!f() { for c in `git rev-list HEAD`; do for fnm in `git diff-tree -r --diff-filter=D --name-only $c | grep -P ".*/$1"` ; do echo "$c $fnm" ; git show $c^:$fnm ; echo "" ; done ; done ; } ; f'

这将提供一个 Git别名,该别名将使用提供的文件名模式(由 提供的模式匹配)find-deleted-file搜索已删除的文件(使用) ,显示文件被删除的提交、文件的全名及其被删除之前的内容。diff-treegrep -P

使用以下示例存储库历史记录:

$ git log --all --graph --decorate --oneline --name-only
* 3f3cba1 (HEAD, master) I
I
* 4c8b369 H
E/H
* a008343 rm F
E/F
* 525a127 FG
E/F
E/G
* 3a10f93 initial
A
B
C
D
E/F

您将使用以下命令搜索已删除的F文件:

$ git find-deleted-file F
a008343eec91fe917078209d44ae93ee72fc5acb E/F
F
于 2012-08-07T15:22:19.083 回答