很久以前,我的项目中有一个文件,我现在希望能够获得它。
问题是:我不知道我什么时候删除了它,也不知道它是在哪条路径上删除的。
当该文件存在时,如何查找该文件的提交?
很久以前,我的项目中有一个文件,我现在希望能够获得它。
问题是:我不知道我什么时候删除了它,也不知道它是在哪条路径上删除的。
当该文件存在时,如何查找该文件的提交?
当前回答
下面是一个简单的命令,在这里,开发人员或git用户可以从存储库根目录传递删除的文件名并获取历史记录:
git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --
如果有人能改进指挥,请这样做。
其他回答
无法编辑接受的响应,因此将其添加为此处的答案,
要恢复git格式的文件,请使用以下命令(注意SHA后面的“^”符号)
git checkout <SHA>^ -- /path/to/file
下面是一个简单的命令,在这里,开发人员或git用户可以从存储库根目录传递删除的文件名并获取历史记录:
git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --
如果有人能改进指挥,请这样做。
获取删除文件的列表并复制删除文件的完整路径
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
假设您想恢复名为MyFile的文件,但不确定其路径(或扩展名):
初步:通过跨到git根来避免混淆
一个非平凡的项目可能有多个具有相似或相同文件名的目录。
> cd <project-root>
查找完整路径git-log--diff-filter=D--summary|grep delete |grep MyFile删除模式100644 full/path/to/MyFile.js
full/path/to/MyFile.js是您要查找的路径和文件。
确定影响该文件的所有提交git-log--oneline--follow--full/path/to/MyFile.jsbd8374c一些有用的提交消息ba8d20e影响该文件的另一个先前提交消息cfea812文件出现的提交的第一条消息。签出文件
如果您选择第一个列出的提交(最后一个按时间顺序排列,此处为bd8374c),则无法找到该文件,因为它在该提交中被删除。
> git checkout bd8374c -- full/path/to/MyFile.js
`error: pathspec 'full/path/to/MyFile.js' did not match any file(s) known to git.`
只需选择前面的(附加插入符号)提交:
> git checkout bd8374c^ -- full/path/to/MyFile.js
尝试使用其中一个查看器,例如gitk,这样您就可以浏览历史记录,找到那个被记住一半的文件。(对于所有分支,如果需要,请使用gitk--all)