[转]Git:如何在项目提交历史中查找已删除的文件?

曾几何时,我的项目中现在有一个文件,我现在希望能够得到。

问题是:我不知道何时删除它以及它在哪条路径上。

如何找到该文件的提交?


#1楼

无法编辑接受的回复,因此在此处将其添加为答案,

要恢复git中的文件,请使用以下命令(注意SHA后面的'^'符号)

git checkout <SHA>^ -- /path/to/file

#2楼

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

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

#3楼

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

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

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


#4楼

@琥珀给出了正确的答案! 仅此一项,如果您不知道文件的确切路径,则可以使用通配符! 这对我有用。

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

#5楼

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

前提: 通过进入git root避免混淆

一个不平凡的项目可能具有名称相似或相同的多个目录。

> cd <project-root>
  1. 查找完整路径

    git log --diff-filter = D --summary | grep删除| grep MyFile

    delete mode 100644 full/path/to/MyFile.js

full/path/to/MyFile.js是您要查找的路径和文件。

  1. 确定影响该文件的所有提交

    git log --oneline --follow-完整/路径/到/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.

  2. 检出文件

如果选择第一个列出的提交(按时间顺序选择最后一个,此处为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

#6楼

摘要:

  1. 第1步

您可以在已删除文件的历史记录中搜索文件的完整路径git log --diff-filter=D --summary | grep filename git log --diff-filter=D --summary | grep filename

  1. 第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

#7楼

如果您不知道确切的路径,可以使用

git log --all --full-history -- "**/thefile.*"

如果知道文件所在的路径,则可以执行以下操作:

git log --all --full-history -- <path-to-file>

这应该显示接触该文件的所有分支中的提交列表。 然后,您可以找到所需文件的版本,并显示为...

git show <SHA> -- <path-to-file>

或使用以下方法将其还原到您的工作副本中:

git checkout <SHA>^ -- <path-to-file>

请注意脱字符号( ^ ),它在标识出该字符之前先进行检出,因为在<SHA>提交时,文件已被删除,我们需要查看上一个提交以获取已删除文件的内容


#8楼

尝试使用其中一种查看器,例如gitk以便您可以浏览历史记录以查找该一半记忆的文件。 (如果需要所有分支,请使用gitk --all

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值