我想订购一些按日期(而不是按时间)输出的git日志
不幸的是,似乎不可能只按某些字符进行排序,而忽略带有sort
的行的其余部分。到目前为止我尝试了什么:
输入:git-log.txt
git log --date-order --reverse --show-all --pretty="%ai#%h %s"
2013-08-22 09:54:12 +0200#f03fec1 G
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 14:10:16 +0200#f53384e F
2013-08-20 16:22:33 +0200#12591fb Z
naiv:这将完全包括日期
sort -k 1.1,1.10 git-log.txt
通过解决与不存在的列的关系进行欺骗
sort -k 1.1,1.10 -k 200 git-log.txt
欺骗它将整行解释为没有分隔字符的单列
sort -k 1.1,1.10 -t "^" git-log.txt
在所有情况下,输出为:
2013-08-20 16:22:33 +0200#12591fb Z
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 14:10:16 +0200#f53384e F
2013-08-22 09:54:12 +0200#f03fec1 G
我需要(查看提交E的位置)
2013-08-20 16:22:33 +0200#12591fb Z
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 14:10:16 +0200#f53384e F
2013-08-22 09:54:12 +0200#f03fec1 G
如何教sort
在平局中保持排序顺序?我可以在输出中添加任何需要的字符。。。
您似乎在为sort
:寻找-s
选项
-s, --stable
stabilize sort by disabling last-resort comparison
说
sort -k 1.1,1.10 -t "^" -s git-log.txt
相反。
还请注意sort-debug选项可以帮助解决这个问题(在这种情况下,它会使第二个有问题的排序变得明显)