如何找到删除文件时的提交?

8 浏览
0 Comments

如何找到删除文件时的提交?

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

问题是:我不知道我何时删除了它,以及它的路径是什么。

我该如何定位这个文件存在时的提交记录呢?

0
0 Comments

如何找到文件被删除时的提交?

有时候我们需要找到一个文件在哪个提交中被删除了,下面是一些方法来解决这个问题:

1. 首先获取被删除的文件列表,并复制被删除文件的完整路径:

git log --diff-filter=D --summary | grep delete

2. 执行下面的命令来找到删除文件的提交ID,并复制该提交ID:

git log --all -- 文件路径

3. 显示被删除文件的差异:

git show 提交ID -- 文件路径

4. 如果需要将输出写入文件,可以使用>操作符:

git show 提交ID -- 文件路径 > deleted.diff

尽管我通过第一步找到了文件的路径,但是第二步会抛出以下错误:unknown revision or path not in the working tree

为了查看删除文件的提交哈希值,可以执行以下命令:git log --diff-filter=D --summary | grep -E 'delete|^commit\s+\S+'

第二步没有返回任何结果。有没有关于为什么会发生这种情况的想法?我的文件名是正确的。

为了将以上三个步骤组合成一个函数,可以将下面的代码添加到你的.bashrc或.zshrc文件中:

git-grep-latest(){ result_path=$(git log --diff-filter=D --summary | grep $1 | head -1 | awk '{print $4;}'); latest_commit=$(git log --all -- $result_path | head -1 | awk '{print $2;}'); git show $latest_commit -- $result_path; }

现在你可以直接执行git-grep-latest some_text来查找最新的提交中包含某个文本的文件。

git log --name-only --diff-filter=D --pretty=format: | awk 'NF' 是第一个命令的更简洁的替代方法(用于打印存储库中所有被删除的文件)。

或者直接获取删除文件的提交哈希和所有文件:git log --name-only --diff-filter=D --format="%H%b"

在Linux中,通过使用管道操作符可以使任何命令与任何命令相结合 - 搜索linux pipes,你会喜欢它的。

0