首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git diff -如何通过“git diff”在两个标记之间获取不同的文件(唯一名称),并按文件提交时间排序。

Git diff -如何通过“git diff”在两个标记之间获取不同的文件(唯一名称),并按文件提交时间排序。
EN

Stack Overflow用户
提问于 2013-08-23 10:17:47
回答 2查看 3.5K关注 0票数 0

通过命令:

代码语言:javascript
复制
$git diff --name-status tag1 tag2 -- target-src

输出如下:

代码语言:javascript
复制
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's answer,我为我的请求添加了awk

代码语言:javascript
复制
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}'

但我觉得太复杂了。能简单点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-23 10:53:36

使用mart1n's idea

代码语言:javascript
复制
git log --name-status '--pretty=format:' tag1 tag2 -- target-src | grep -vxh '\s*'

给出一个清晰的输出。

还可以尝试以下脚本:

代码语言:javascript
复制
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选项,如果您希望旧的已更改的文件位于顶部。

票数 0
EN

Stack Overflow用户

发布于 2013-08-23 10:25:44

您可以尝试同样的方法,但是使用git log

代码语言:javascript
复制
git log --name-status tag1 tag2 -- target-src

这样,文件按照提交的顺序排序。此外,git log有各种排序选项,您可以尝试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18400336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档