有多种方法可以使用 git log 来“选择”提交。例如:
和许多其他人。
但是,所有这些仅显示在命令行上选择的提交。我想要的是查看我范围内的所有提交,但突出显示(使用颜色、标记或其他任何内容)这些提交的特定子集,例如更改特定文件或其他内容的提交。所以在做的时候:
git log --oneline master..@ -- path/to/frobnitz
Run Code Online (Sandbox Code Playgroud)
而不是看到:
12ca6d863 foo
6166da1fd bar
894567343 baz
Run Code Online (Sandbox Code Playgroud)
我会看到类似的东西:
46984ad11 (HEAD -> master) git is fun!
2e11a5382 cool beans
>> 12ca6d863 foo
60069036d whatever
d698663d0 something
>> 6166da1fd bar
3d2c811e3 more cool stuff
>> 894567343 baz
3d2c811e3 cool stuff
Run Code Online (Sandbox Code Playgroud)
此外,理想的解决方案将使用--graphmode,因为我还想查看所选提交的合并和分支上下文。
我还注意到它git log支持各种历史简化场景,这在某些情况下几乎可以满足我的需求,但要弄清楚如何实现并不容易,也不是我想要的。我已经有了想要查看的历史记录,并且已经有了想要突出显示的提交。
我有一些想法,但我不喜欢其中任何一个:
编写脚本——运行两个 git 日志,然后使用其中一个的输出来装饰/操作另一个。这样做的缺点是它很脆弱,对于我可能提供给目标日志的不同选项集,它不能很好地工作,例如--graph
对于“选定的”提交,selectedcommits为它们分配临时引用,然后用于--decorate-refs=selectedcommits显示相关提交。这看起来很乱。
只是为了好玩,同时等待更好的答案。
git log --oneline --decorate=no --graph | less -p $(git log --pretty=%h -- Makefile | tr '\n' '|')
Run Code Online (Sandbox Code Playgroud)
这个想法是通过管道传输输出,例如,less用于突出显示特定的提交。
在 Linux 上的 bash 和 Windows 上的 git-bash 中进行了测试。
这里是第一次尝试别名:
[alias] hl-graph = !git log --oneline --graph --color | less -R -p $(git log --pretty=%h \"$@\" | tr '\n' '|') && :
Run Code Online (Sandbox Code Playgroud)
要突出显示的提交可以像平常一样定义:
git hl-graph --since="1 month ago" -- path/to/frobnitz
Run Code Online (Sandbox Code Playgroud)
但是日志格式无法修改。