查询所有提交到特定文件的git reflog

cpj*_*eur 47 git reflog

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

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

git log foo.txt
Run Code Online (Sandbox Code Playgroud)

我想搜索reflog以查找对该文件的所有提交,以便找到我的"丢失"提交.

ral*_*nja 54

尝试:

git rev-list --all -- foo.txt
Run Code Online (Sandbox Code Playgroud)

这将为您提供包含foo.txt的所有提交的列表.

  • 我不得不添加一个额外的`--`,如下所示:git rev-list --all - foo.txt (7认同)
  • 这不会搜索引用日志 (6认同)
  • git rev-list --all foo.txt | xargs git显示$ 1 (4认同)
  • 我使用:`git rev-list --all -- foo.html | xargs git show --name-status --oneline` (2认同)
  • 这实际上不会找到丢失的提交,请参阅下面的我的答案 (2认同)

Ark*_*kin 30

在寻找答案时遇到了这个问题,这很简单:git reflog -- $PATH,其中包括修改和其他不可见的操作(尽管要注意,reflog将由gc修剪)

  • 一个答案统治他们,一个答案找到他们,一个答案把他们带来,在黑暗中挑选他们。@ArnaudP 是对的,这个答案应该是公认的,非常感谢! (3认同)
  • 哇-所以转速表找不到我的文件,但是reflog拥有了!甚至有带有`--all`的rev-list,但是仍然找不到它。谢谢,您救了我几个小时。 (2认同)
  • 为了避免混淆,使用`git reflog - <path>形式可能更合适.双破折号明确表示你传递的是文件而不是潜在的参考 (2认同)
  • 这显然应该是公认的答案.特别是因为OP确实提到了reflog. (2认同)
  • 这绝对是最有用的命令,也是最新的命令。帮助我找回丢失的更改:) (2认同)

wde*_*dev 20

我用的是:

git rev-list --all --remotes --pretty=oneline foo.txt
Run Code Online (Sandbox Code Playgroud)

--remotes选项允许您同时使用您的遥控器, - pretty = oneline使它也显示提交消息.当你在寻找一个你不知道名字的分支中推送到远程的修改时非常有用.

  • 我不得不使用`git rev-list --all --remotes --pretty=oneline -- foo.txt`(注意`--`) (2认同)