找到首次创建目录的git commit

时间:2018-02-13 04:44:29

标签: git

works for file对目录不起作用的解决方案。我怎么知道第一次创建目录的第一个git提交?

编辑:正如其中一条评论指出,只有当该目录下的文件被添加到版本控制时,目录才会出现在git中。在这个问题的上下文中,我不知道首先添加该目录下的哪个文件。

4 个答案:

答案 0 :(得分:3)

我知道快速查看许多提交中的路径的最佳方法是使用git cat-file --batch-check。反向列出您的提交,即最早使用您感兴趣的路径并将其提供给批处理检查程序,如果路径丢失,它会报告,但它会对stdout执行,因此您可以打印第一行没有投诉:

git log --reverse --pretty=$'%H:path/to/folder\t%H' \
| git cat-file --batch-check='%(rest)' \
| awk 'NF==1 { print;exit; }'

答案 1 :(得分:1)

@VonC的答案为基础,将--reverse与一些awkward post-processing一起使用(可悲的是,{em} {{ 1}}),我们得到:

--reverse

答案 2 :(得分:0)

对于文件夹的所有文件,一种可能的方法是检查when that file was added

git log --diff-filter=A -- foo.js

但仅使用log for that folder也可以提供帮助:

git log -- path/to/folder

答案 3 :(得分:0)

您可以使用git bisect查找某些内容发生变化的时间。它假设存储库过去是正确的,但最近发生了一些事情,使其不正确。

对于这个例子,"好"是目录,"坏"是现有的目录。

首先,您会发现提交内容"坏":

$ ls -d MyDirectory
MyDirectory/
$ git bisect start
$ git bisect bad

然后你找到了一个好的"

的提交
$ git checkout HEAD~1000
$ ls -d MyDirectory
ls: cannot access 'MyDirectory': No such file or directory
$ git bisect good

然后你要么反复做手册bisect good/bad

$ if [ -d MyDirectory ]; then git bisect bad; else git bisect good; fi

或者您使用bisect run

$ git bisect run [ ! -d MyDirectory ]

最后,它会告诉你第一个"坏"提交。