Git diff-如何通过git diff获取两个标签之间的不同文件(仅名称),并按文件提交时间排序

时间:2013-08-23 10:17:47

标签: git git-diff

通过命令:

$git diff --name-status tag1 tag2 -- target-src

输出如:

M       src/config.h
M       src/createTable.sql
A       src/gameserver/BattleGround_10v10.h
M       src/gameserver/CMakeLists.txt
M       src/gameserver/achieve.cpp
M       src/gameserver/achieve.h
A       src/gameserver/action.cpp
A       src/gameserver/action.h
A       src/gameserver/activity.cpp
A       src/gameserver/activity.h
M       src/gameserver/admin.cpp

我认为两个标签之间已经修改过的文件。但是我想要的是按承诺时间排列的列表顺序。任何人都可以给出好的建议,谢谢。

感谢@ ilius的回答我为我的请求添加了awk

git diff --name-status tag1 tag2 | while read line ; do
    status=${line:0:1}
    path=${line:2}
    date=$(git log -1 '--pretty=format:%ci' -- "$path")
    echo "$date    $status   $path"
done | sort -r | awk '{print $4" "$5}'

但我认为这太复杂了,更简单了吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用git log尝试相同的事情:

git log --name-status tag1 tag2 -- target-src

这样,文件按提交的顺序排序。此外,git log还有各种各样的排序选项。

答案 1 :(得分:0)

使用mart1n的想法:

git log --name-status '--pretty=format:' tag1 tag2 -- target-src | grep -vxh '\s*'

提供干净的输出

也可以尝试这个脚本:

git diff --name-status tag1 tag2 | while read line ; do
    status=${line:0:1}
    path=${line:2}
    date=$(git log -1 '--pretty=format:%ci' -- "$path")
    echo "$date    $status   $path"
done | sort -r

您可以稍后删除日期(用于排序),但我认为日期很有用 如果您希望旧的已更改文件位于顶部,也可以从-r删除sort选项