首页 > 解决方案 > 如何显示 HEAD 和 origin/master(或最新的共同祖先)之间的所有提交

问题描述

我所期望的是一个 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'

但我不喜欢它有两个原因:

  1. 它迫使我不使用--oneline我真正想继续使用的颜色(grep不能很好地与--onelinegrep 一起使用,grep with 的结果--oneline根本没有输出,可能是因为--oneline's 颜色,不确定)。
  2. 使用 grep 使我失去所有颜色,尽管使用--colors=always它根本没有效果,所以我最终得到无色输出。
  3. 尽管我可以想象没有任何有用的流程需要除 之外的值1000,但我在其中放置了一个常量让我感到困扰,命令行不应该使用常量来实现我想要的。

(我的 grep 版本是3.4,我的 git 版本是2.25.1

标签: bashgitcolorsgrepmaster

解决方案


尝试 :

git log --graph --oneline --ancestry-path origin/master^..HEAD

--ancestry-path将仅选择既是 的父级HEAD 是 的子级的origin/master^提交,因此来自合并于 的分支的提交origin/master将被忽略。

您也可以尝试跳过^after origin/master,并添加--boundary

git log --graph --oneline --ancestry-path --boundary origin/master..HEAD

推荐阅读