在其他提交的上下文中,在 git log 中显示特定提交?

Ram*_*man 5 git

有多种方法可以使用 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显示相关提交。这看起来很乱。

ser*_*gej 6

只是为了好玩,同时等待更好的答案。

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)

但是日志格式无法修改。

  • 要在不使用 less/paging 的情况下执行此操作,您还可以将 `less -p` 替换为 `grep -E --color`。对于彩色输出,请将“--color”附加到第一个日志命令,并在第二个命令上附加“less -R”或“grep --color”。 (2认同)