簡體   English   中英

Git diff - 如何通過“git diff”在兩個標簽之間獲取不同的文件(只有名稱)並按文件提交時間排序

[英]Git diff - how to get different files (only name) between two tags by 'git diff' and order by the file commit time

通過命令:

$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}'

但我覺得太復雜了。 可以簡單點嗎?

你可以嘗試同樣的事情,但使用git log

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

這樣,文件按提交的順序排序。 此外git log有各種排序選項,您可以嘗試。

使用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

您可以稍后刪除日期(用於排序),但我認為日期很有用。

如果您希望較舊的更改文件位於頂部,您還可以從sort刪除-r選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM