任务号=JIRA问题号=****(例:7600)
假设我有一个包含以下消息的提交列表:
PRJ-7600 - first message
PRJ-8283 - second message
PRJ-8283 - third message
PRJ-1001 - fourth message
PRJ-8283 - fifth message
PRJ-7600 - sixth message
第一个是最旧的提交。
想要输出:
1001
7600
8283
我使用以下命令列出了我的提交:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort
在哪里
- 提交者 = 作者(在本例中)
--grep=PRJ
指定忽略自动生成的注释(“Merge branch ...”)(替代--no - merge
)--pretty=format:"%s"
仅显示消息(删除散列)
实际输出:
PRJ-1001 - fourth message
PRJ-7600 - first message
PRJ-7600 - sixth message
PRJ-8283 - fifth message
PRJ-8283 - second message
PRJ-8283 - third message
是否可以提取那些只显示一次的数字(可能使用正则表达式或类似子字符串的东西)?
详细信息:
- Windows 7
- git 1.9.5 (msysgit) -> 从 cmd 使用,而不是从 Git Bash 控制台使用
最佳答案
这将在 bash 或 git bash 中完成:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort | cut --delimiter='-' --fields=2 | uniq
所以在问题中发布的第一部分的基础上,额外的是:
| cut --delimiter='-' --fields=2 | uniq
这会将排序后的输出通过管道传输到 cut
,后者提取由连字符“-”分隔的第二个字段,然后将结果通过管道传输到 uniq
以显示不同的值。
此解决方案在用于cut
的定界符形式上存在弱点 - 如果日志消息的格式发生变化,则可能会中断。
更好的解决方案是使用正则表达式搜索(而不是 cut
)来查找问题键(我认为是“/PRJ-.+\s/”...)并输出数字部分。
编辑
因此,经过一番挖掘,可以使用 grep
来更可靠地执行此操作以查找项目键(在本例中为 PRJ):
git log ... | grep -oP --regexp="PRJ-\K\d+" | uniq
-o
告诉 grep 只输出行中匹配的部分
-P
使用正则表达式的 PCRE (perl/PHP) 风格,从而使我们能够使用
\K
选项导致之前(该点之前)的匹配项被排除
关于git - 根据消息从 git log 中获取任务编号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185916/