很久以前,我的项目中有一个文件,我现在希望能够获得它。

问题是:我不知道我什么时候删除了它,也不知道它是在哪条路径上删除的。

当该文件存在时,如何查找该文件的提交?


当前回答

@琥珀给出了正确的答案!另外,如果您不知道文件的确切路径,可以使用通配符!这对我有用。

git log --all -- **/thefile.*

其他回答

以下是我的解决方案:

git log --all --full-history --oneline -- <RELATIVE_FILE_PATH>
git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>

无法编辑接受的响应,因此将其添加为此处的答案,

要恢复git格式的文件,请使用以下命令(注意SHA后面的“^”符号)

git checkout <SHA>^ -- /path/to/file

如果您希望查看所有已删除文件的大小

以及相关的SHA

git log --all --stat --diff-filter=D --oneline

添加-p |--补丁以查看内容

git log --all --stat --diff-filter=D -p

要缩小到任何文件,您有两个简单的选项,可以使用路径规范,也可以通过管道连接到grep并搜索文件名。

使用grep:

git log --all --stat --diff-filter=D --oneline | grep foo

使用路径规范:

git log --all --stat --diff-filter=D --oneline -- '*foo*'

如果您想查看内容,路径规范可以与-p |--patch配合使用:

git log --all --stat --diff-filter=D --oneline --patch -- '*foo*'

如果你知道文件在哪里,你可能也会喜欢这个

git log --all --full-history -- someFileName

获取删除文件的列表并复制删除文件的完整路径

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

执行下一个命令以查找该提交的提交id并复制该提交id

git log --all -- FILEPATH

显示已删除文件的差异

git show COMMIT_ID -- FILE_PATH

记住,您可以使用>like将输出写入文件

git show COMMIT_ID -- FILE_PATH > deleted.diff

如果您不知道可以使用的确切路径

git log --all --full-history -- "**/thefile.*"

如果您知道文件所在的路径,可以执行以下操作:

git log --all --full-history -- <path-to-file>

这将显示所有涉及该文件的分支中的提交列表。然后,您可以找到所需文件的版本,并用。。。

git show <SHA> -- <path-to-file>

或使用以下方法将其恢复到工作副本中:

git checkout<SHA>^--<文件路径>

请注意插入符号(^),它在所标识的签出之前获得签出,因为在<SHA>提交文件时,文件被删除,我们需要查看上一次提交以获取已删除文件的内容