查询git reflog以获取对特定文件的所有提交

查询git reflog以获取对特定文件的所有提交,git,reflog,Git,Reflog,是否可以检查git reflog中对特定文件的所有提交 我对foo.txt文件做了一个提交,现在它不再显示在git历史记录中 git log foo.txt 我想搜索reflog以查找对此文件的所有提交,以便找到我的“丢失”提交。尝试: git rev-list --all -- foo.txt 这将为您提供包含foo.txt的所有提交的列表。我将使用: git rev-list --all --remotes --pretty=oneline foo.txt --remotes选项还允许

是否可以检查git reflog中对特定文件的所有提交

我对foo.txt文件做了一个提交,现在它不再显示在git历史记录中

git log foo.txt
我想搜索reflog以查找对此文件的所有提交,以便找到我的“丢失”提交。

尝试:

git rev-list --all -- foo.txt
这将为您提供包含foo.txt的所有提交的列表。

我将使用:

git rev-list --all --remotes --pretty=oneline foo.txt

--remotes选项还允许您使用远程设备,--pretty=oneline使其同时显示提交消息。当您在不知道其名称的分支中查找推送到远程的修改时非常有用。

在搜索答案时遇到此问题,答案很简单:
git reflog--$PATH
,其中将包括修改和其他不可见的操作(不过请注意,reflog将被gc删除)

当我用rebase清理历史记录时,我丢失了一个零钱。我使用了类似这样的方法来搜索重录:

for r in $(git reflog -- ${file} | cut -d ' ' -f1); do git show ${r}:${file}; done

我不得不添加一个额外的
--
,比如:git rev list--all--foo.txtI使用:
git rev list--all--foo.html | xargs git show--name status--oneline
这不会搜索reflog这实际上不会找到丢失的提交,请参阅下面的答案我必须使用
git rev list--all--remotes--pretty=oneline--foo.txt
(注意,
--
)虽然这回答了您自己的用例,
rev list
不会搜索“reflog”,也不会找到“丢失”的提交,例如,由于一个分支的重置。哇,所以rev list没有找到我的文件,但是reflog找到了它!甚至有带有
--所有
的rev list,但是仍然没有找到它。谢谢你刚刚为我节省了几个小时。为了避免混淆,可能更适合使用
git reflog--
双破折号明确表示你正在传递一个文件而不是潜在的引用这应该是公认的答案。特别是因为OP确实提到了reflog。一个答案可以统统它们,一个答案可以找到它们,一个答案可以把它们都带来,然后在黑暗中挑选它们。@ArnaudP是对的,这个答案应该是公认的,非常感谢!这肯定是最重要的答案有用的命令,也是最新的命令。帮助我找回丢失的更改:)