我几乎使用了所有git log命令,但我还没有找到最佳方法。我只需要这个 - 只获取带路径的文件名
/path/filename.txt
/path/anotherfile.ext
...
...
我的输入是日期FROM和TO到git log命令。 git log既可以提供开发人员名称,也可以提供日期或提交号码或者我不想要的文件名。如何仅使用完整路径获取文件名?
答案 0 :(得分:3)
使用--since
和--until
选项选择时间范围,然后您可以使用UNIX管道grep
,sort
并收集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
?