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

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

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


当前回答

以下是我的解决方案:

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

其他回答

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

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

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

摘要:

步骤1

在已删除文件的历史记录中搜索文件的完整路径git-log--diff-filter=D--summary|grep filename

步骤2

您在删除文件之前从提交还原文件

restore () {
  filepath="$@"
  last_commit=$(git log --all --full-history -- $filepath | grep commit | head -1 | awk '{print $2; exit}')
  echo "Restoring file from commit before $last_commit"
  git checkout $last_commit^ -- $filepath
}

restore my/file_path

尝试使用其中一个查看器,例如gitk,这样您就可以浏览历史记录,找到那个被记住一半的文件。(对于所有分支,如果需要,请使用gitk--all)

下面是一个简单的命令,在这里,开发人员或git用户可以从存储库根目录传递删除的文件名并获取历史记录:

git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all -- 

如果有人能改进指挥,请这样做。

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

以及相关的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