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
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
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
到