Git:如何在项目提交历史记录中找到已删除的文件?

Git:如何在项目提交历史记录中找到已删除的文件?,git,Git,从前,在我的项目中有一个文件,我现在希望能够得到它 问题是:我不知道我什么时候删除了它,它是在哪条路径上删除的 如果您不知道可以使用的确切路径,如何定位此文件存在时的提交 git log --all --full-history -- "**/thefile.*" 如果知道文件所在的路径,可以执行以下操作: git log --all --full-history -- <path-to-file> git日志--全部--完整历史-- 这将显示所有涉及该文件的分支中的提交列表。

从前,在我的项目中有一个文件,我现在希望能够得到它

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


如果您不知道可以使用的确切路径,如何定位此文件存在时的提交

git log --all --full-history -- "**/thefile.*"
如果知道文件所在的路径,可以执行以下操作:

git log --all --full-history -- <path-to-file>
git日志--全部--完整历史--
这将显示所有涉及该文件的分支中的提交列表。然后,您可以找到所需文件的版本,并使用

git show <SHA> -- <path-to-file>
git show--
或者使用以下方法将其恢复到工作副本中:

git签出^--


请注意插入符号(
^
),它在标识的符号之前进行签出,因为在
提交文件时,文件被删除,如果您不知道可以使用的确切路径,我们需要查看上一次提交以获取删除文件的内容

git log --all --full-history -- "**/thefile.*"
如果知道文件所在的路径,可以执行以下操作:

git log --all --full-history -- <path-to-file>
git日志--全部--完整历史--
这将显示所有涉及该文件的分支中的提交列表。然后,您可以找到所需文件的版本,并使用

git show <SHA> -- <path-to-file>
git show--
或者使用以下方法将其恢复到工作副本中:

git签出^--


请注意插入符号(
^
),它在标识的符号之前进行签出,因为在提交文件时,文件被删除,我们需要查看之前的提交以获取删除文件的内容

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

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

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

要在git中还原文件,请使用以下命令(注意SHA后面的“^”符号)

git签出^path/to/file

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

要在git中还原文件,请使用以下命令(注意SHA后面的“^”符号)

git签出^path/to/file

获取已删除文件的列表,并复制已删除文件的完整路径

git log --diff-filter=D --summary | grep delete
git show COMMIT_ID -- FILE_PATH
执行下一个命令以查找该提交的提交id并复制提交id

git log --all -- FILEPATH
显示已删除文件的差异

git log --diff-filter=D --summary | grep delete
git show COMMIT_ID -- FILE_PATH
请记住,您可以使用
将输出写入文件,如

git show COMMIT_ID -- FILE_PATH > deleted.diff

获取已删除文件的列表并复制已删除文件的完整路径

git log --diff-filter=D --summary | grep delete
git show COMMIT_ID -- FILE_PATH
执行下一个命令以查找该提交的提交id并复制提交id

git log --all -- FILEPATH
显示已删除文件的差异

git log --diff-filter=D --summary | grep delete
git show COMMIT_ID -- FILE_PATH
请记住,您可以使用
将输出写入文件,如

git show COMMIT_ID -- FILE_PATH > deleted.diff

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

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

如果有人可以改进命令,请执行

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

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

如果有人可以改进命令,请执行

@Amber给出了正确的答案!只需再添加一个,如果您不知道文件的确切路径,可以使用通配符!这对我有用

git log --all -- **/thefile.*

@Amber给出了正确的答案!只需再添加一个,如果您不知道文件的确切路径,可以使用通配符!这对我有用

git log --all -- **/thefile.*

假设要恢复名为
MyFile
的文件,但不确定其路径(或扩展名):

预备:通过单步进入git根目录避免混淆

一个非平凡的项目可能有多个具有相似或相同文件名的目录

> cd <project-root>
只需选择前面的(附加插入符号)提交:


假设要恢复名为
MyFile
的文件,但不确定其路径(或扩展名):

预备:通过单步进入git根目录避免混淆

一个非平凡的项目可能有多个具有相似或相同文件名的目录

> cd <project-root>
只需选择前面的(附加插入符号)提交:

总结:

  • 第一步
  • 您可以在已删除文件的历史记录中搜索文件的完整路径
    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
    
    总结:

  • 第一步
  • 您可以在已删除文件的历史记录中搜索文件的完整路径
    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
    
    以下是我的解决方案:

    git log --all --full-history --oneline -- <RELATIVE_FILE_PATH>
    git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>
    
    git日志--全部--完整历史--一行--
    git签出^
    
    以下是我的解决方案:

    git log --all --full-history --oneline -- <RELATIVE_FILE_PATH>
    git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>
    
    git日志--全部--完整历史--一行--
    git签出^
    
    如果您希望查看所有已删除文件的
    大小
    以及相关的
    SHA

    git log--all--stat--diff filter=D--oneline
    
    添加a-p也可以查看内容

    git log--all--stat--diff filter=D-p
    
    要缩小到任何文件,只需通过管道连接到grep并搜索文件名即可

    git log--all--stat--diff filter=D--oneline | grep someFileName
    
    如果您知道文件在哪里,您可能也会喜欢这个

    git日志--all--full history--someFileName
    
    如果您希望查看所有已删除文件的
    大小
    以及相关的
    SHA

    git log--all--stat--diff filter=D--oneline
    
    添加a-p也可以查看内容

    git log--all--stat--diff filter=D-p