【发布时间】:2021-03-05 09:01:07
【问题描述】:
我期望的是一个 git 命令,它会显示所有以 HEAD 开头并返回到 origin/master 到最新共同祖先的提交。
有时这很有效:
git log --oneline origin/master^..HEAD
如果HEAD 不直接返回到origin/master,它甚至会在最后一个共同祖先处停止。
但很多时候它随机无法按预期工作,并且在origin/master 之后的行数甚至更多(行为通常在git fetch 之后发生变化)。
我的解决方法是:
git log --pretty=format:'%C(auto)%h %C(magenta)%cd %C(blue)%an%C(auto)%d %C(reset)%s' origin/master^..HEAD | grep --color=always -B 1000 'origin/master'
但我不喜欢它有两个原因:
- 它迫使我不使用
--oneline,我真的想继续使用它的颜色(grep不适用于--oneline,grep 与--oneline的结果根本没有输出,也许因为--oneline的颜色,不确定)。 - 使用 grep 会使我失去所有颜色,尽管使用
--colors=always它根本没有任何效果,所以我最终得到一个无色的输出。 - 虽然我可以想象没有有用的流程需要
1000以外的值,但我在其中放置了一个常量让我感到困扰,命令行不应该使用常量来实现我想要的。
(我的grep版本是3.4,我的git版本是2.25.1)
【问题讨论】:
-
使用
origin/master..HEAD应该显示作为 HEAD 历史的一部分的修订版不属于 origin/master。 -
哦,我明白你在说什么,所以我的错误是在
origin/master之后添加了^。但是如果我想在输出中只包含origin/master的一个提交,而不是下面的更多提交呢? -
我可以使用这个:
git log --oneline origin/master.. ; git log --oneline origin/master -1但它只会在HEAD重新基于origin/master的基础上给我正确的输出,如果只有一个共同的祖先存在,这将添加origin/master行是不必要的,我不想为那个简单的单行添加复杂的逻辑来避免这种情况。另外,我真的很想了解为什么^会导致包含多个提交。 -
也许你想看看
git ref-list。git ref-list HEAD ^origin/master。它有一些你可能想探索的时髦选项:git help ref-list -
@eftshift0 你在想
git rev-list吗?
标签: bash git colors grep master