如何使用git log获取带路径的文件名?

时间:2015-10-12 12:10:10

标签: git github git-log

我几乎使用了所有git log命令,但我还没有找到最佳方法。我只需要这个 - 只获取带路径的文件名

/path/filename.txt
/path/anotherfile.ext
...
...

我的输入是日期FROM和TO到git log命令。 git log既可以提供开发人员名称,也可以提供日期或提交号码或者我不想要的文件名。如何仅使用完整路径获取文件名?

3 个答案:

答案 0 :(得分:3)

使用--since--until选项选择时间范围,然后您可以使用UNIX管道grepsort并收集uniq e路径:

git log --name-status --since='..' --until='..' | grep -E '^[A-Z]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'

示例:

git log --name-status --since='1 January 2015' --until='2 January 2015' | grep -E '^[A-Z]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'

有关更详细的git log输出,请参阅How to have git log show filenames like svn log -v

如果你必须提交哈希值,你也可以使用git diff--name-only,而另一个答案提到:

git diff hash1..hash2 --name-only

答案 1 :(得分:2)

使用--name-only并删除格式为空的邮件

git log --name-only --format=""

像往常一样使用所有其他git log选项。例如。

git log --name-only --format="" -n 2 master

可选择排序和删除dupplicates

git log --name-only --format="" | sort | uniq

答案 2 :(得分:1)

这不使用git log但是如果你愿意使用提交对象(哈希,分支引用或其他提交标识符),git diff会使它变得简单。获取最后三次提交的已更改文件的示例。

$ git diff HEAD~3 --name-only
> some/path/with/file.php
> another/path/and/file.html
> yet/another.json

您可以使用单个提交替换HEAD~3,以便与当前的HEAD(您正在“提交”)进行比较,或者使用<commitish>..<commitish>定义提交范围:< / p>

$ git diff HEAD..abcd1234 --name-only
> file/name/here.cpp

$ git diff 1234abcd..abcd1234 --name-only
> some/file/name-here.txt

如果您需要根据修改类型过滤文件(例如添加,修改,删除...),您可以使用--diff-filter选项。 man git diff

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
       Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...) changed (T), are
       Unmerged (U), are Unknown (X), or have had their pairing Broken (B). Any combination of the filter characters (including none) can be used. When * (All-or-none) is added
       to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no file that matches other criteria, nothing
       is selected.

如果您需要使用日期进行过滤,那么这可能不是最佳选择。也许使用git log --since=...获取日期的第一个哈希并将其传递给git diff