Amb*_*ber 1476
如果您不知道可能使用的确切路径
git log --all --full-history -- "**/thefile.*"
Run Code Online (Sandbox Code Playgroud)
如果您知道文件所在的路径,则可以执行以下操作:
git log --all --full-history -- <path-to-file>
Run Code Online (Sandbox Code Playgroud)
这应该显示触及该文件的所有分支中的提交列表.然后,您可以找到所需文件的版本,并将其显示为...
git show <SHA> -- <path-to-file>
Run Code Online (Sandbox Code Playgroud)
或者将其恢复到您的工作副本中:
git checkout <SHA>^ -- <path-to-file>
请注意插入符号(^),它在标识之前得到结帐,因为在<SHA>提交时删除文件,我们需要查看先前的提交以获取已删除文件的内容
Fat*_*cet 375
获取已删除文件的列表并复制已删除文件的完整路径
git log --diff-filter=D --summary | grep delete
Run Code Online (Sandbox Code Playgroud)
执行下一个命令以查找该提交的提交ID并复制提交ID
git log --all -- FILEPATH
Run Code Online (Sandbox Code Playgroud)
显示已删除文件的差异
git show COMMIT_ID -- FILE_PATH
Run Code Online (Sandbox Code Playgroud)
请记住,您可以使用>like 将输出写入文件
git show COMMIT_ID -- FILE_PATH > deleted.diff
Run Code Online (Sandbox Code Playgroud)
小智 37
无法编辑已接受的响应,因此在此处将其添加为答案,
要在git中恢复文件,请使用以下内容(注意SHA之后的'^'符号)
git checkout <SHA>^ -- /path/to/file
Run Code Online (Sandbox Code Playgroud)
Pet*_*bev 28
@Amber给出了正确答案!再补充一点,如果你不知道文件的确切路径,你可以使用通配符!这对我有用.
git log --all -- **/thefile.*
Run Code Online (Sandbox Code Playgroud)
Cal*_*laf 28
假设您要恢复一个名为的文件MyFile,但不确定其路径(或其扩展名):
Prelim.:通过踩到git root避免混淆
一个重要的项目可能有多个具有相似或相同名称的目录.
> cd <project-root>
Run Code Online (Sandbox Code Playgroud)
找到完整的路径
git log --diff-filter = D --summary | grep删除| grep MyFile
delete mode 100644 full/path/to/MyFile.js
full/path/to/MyFile.js 是你正在寻找的路径和文件.
确定影响该文件的所有提交
git log --oneline --follow - full/path/to/MyFile.js
bd8374c Some helpful commit message
ba8d20e Another prior commit message affecting that file
cfea812 The first message for a commit in which that file appeared.
签出文件
如果您选择第一个列出的提交(最后按时间顺序排列,此处为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.`
Run Code Online (Sandbox Code Playgroud)
只需选择前面的(附加插入符号)提交:
> git checkout bd8374c^ -- full/path/to/MyFile.js
Run Code Online (Sandbox Code Playgroud)
Jas*_*son 19
这里繁琐的事情之一就是获取已删除文件的路径,所以我写下了一个简单的命令,dev或git用户可以传递已删除的文件名并获取历史记录:
git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --
Run Code Online (Sandbox Code Playgroud)
如果有人,可以改进命令,请做.
Phi*_*ley 16
尝试使用其中一个查看器,gitk以便您可以浏览历史记录以查找该半记忆文件.(gitk --all如果所有分支都需要,请使用)
jas*_*ard 13
size所有已删除文件的以及相关的SHA
git log --all --stat --diff-filter=D --oneline
Run Code Online (Sandbox Code Playgroud)
添加 a-p|--patch也可以查看内容
git log --all --stat --diff-filter=D -p
Run Code Online (Sandbox Code Playgroud)
要缩小到任何文件,您有两个简单的选择,您可以使用路径规范,也可以通过管道连接到 grep 并搜索文件名。
使用 grep:
git log --all --stat --diff-filter=D --oneline | grep foo
Run Code Online (Sandbox Code Playgroud)
使用路径规范:
git log --all --stat --diff-filter=D --oneline -- '*foo*'
Run Code Online (Sandbox Code Playgroud)
-p|--patch如果您想查看内容,路径规范可以与 很好地配合使用:
git log --all --stat --diff-filter=D --oneline --patch -- '*foo*'
Run Code Online (Sandbox Code Playgroud)
如果您知道该文件在哪里,您可能也会喜欢这个
git log --all --full-history -- someFileName
Run Code Online (Sandbox Code Playgroud)
概括:
您在已删除文件的历史记录中搜索文件完整路径 git log --diff-filter=D --summary | grep filename
您在文件被删除之前从提交中恢复文件
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290410 次 |
| 最近记录: |