如何过滤git日志以仅显示已修改但未删除的不同文件名?

时间:2014-09-24 20:59:23

标签: git

我正在尝试编写一个git钩子,当它们被推送到服务器时,它会对文件进行语法检查。

我已使用

成功显示了包含文件名的日志
  

git log --name-only --pretty = format:'%H'--diff-filter = AM

这为我提供了以下格式的日志:

\< \ SHA-1>

路径/到/文件

路径/到/ file2的

...

这将只提供已添加或修改的文件。

我想更进一步,并有一个符合以下每个标准的日志:

  1. 显示以后提交中尚未删除的所有已修改文件。   ex)我修改了一个文件然后提交它然后我git rm那个文件并提交它。日志输出不应显示该文件,因为它在以后的提交中被删除
  2. 显示尚未删除的所有已创建文件。 ex)我添加一个文件并提交它,然后在稍后的提交中我git rm该文件。日志输出不应显示该文件,因为它在以后的提交中被删除。
  3. 仅显示最新提交中的已修改文件。 ex)我修改一个文件并提交它。我再次修改文件并提交。日志输出应仅显示最近提交的文件。
  4. 如何在没有代码的情况下实现这一目标? ie)使用git或git和common unix命令的某种组合的命令行解决方案。

1 个答案:

答案 0 :(得分:0)

如果您需要自给定修订版rev以来添加或修改的文件列表,

git diff --name-only --diff-filter=AM $rev..

应该足够了。

如果你真的需要知道为每个文件引入更改的最新非合并提交,那么类似下面的内容可能会起作用,但速度会非常慢。

for rev in $(git rev-list --min-parents=1 --max-parents=1 HEAD); do
    echo $rev
    for file in $(git diff --name-only $rev^..$rev); do
        [ -z "$(git log -1 $rev.. -- $file)" ] && echo "$file"
    done
    echo
done