Git 日志:列出所有父提交

Mar*_*rco 5 git github git-log

在共享的 GitHub 存储库中,我想用它git log来显示最近提交的列表。

当前的历史类似于以下内容:

                       (master)
B------Merge1--Merge2--Merge3
      /       /       / 
 - -C1       /       /
      - - -C2       /
 - - -C3----------C4
Run Code Online (Sandbox Code Playgroud)

Merge提交的合并拉请求的结果,并C提交由该仓库的叉到来。

git log 显示如下:

git log --oneline master
    Merge3
    Merge2
    Merge1
    B
Run Code Online (Sandbox Code Playgroud)

但我真正感兴趣的是C提交。 git log --graph是我发现显示 C1、C2 和 C3 的唯一可能方式。

是否还有其他选项(不涉及--graph)可以显示 C1、C2 和 C3?

我希望能够做这样的事情

git log --oneline --no-merges <...insert magic here...> master
 C4
 C3
 C2
 C1
 B
Run Code Online (Sandbox Code Playgroud)

我在手册页中发现的唯一明智的事情是--first-parent,但我发现无法禁用或反转它。

jth*_*ill 2

如果您没有进行合并和拉取,那么--no-ff在分支提示处进行实际的合并提交将是一个不可靠的指标,因此如果您只是不想看到合并提交,

git log --no-merges --oneline -n 10   # or --since, or something, might do 
Run Code Online (Sandbox Code Playgroud)

如果您想根据提交属性决定返回列表多远,则 rev-list 没有作为内置截止标准,这只是过滤输出rev-list或更一般的某些log --pretty=format:选择中的这些属性的问题,这是一个只列出了通往选定分支的合并分支的提示,得到 C1-C2-C4 ——因为我不知道你是如何决定绕过 C4 的......

#!/bin/sh
git rev-list --parents "${@-HEAD}" \
| sed -n '/^[^ ]* [^ ]* /!q;s///;s/[^ ]*/&^!/gp' \
| xargs git log --oneline
Run Code Online (Sandbox Code Playgroud)

sed:

/^[^ ]* [^ ]* /!q      # quit at first rev with less than two parents
s///                   # strip rev and its first parent
s/[^ ]*/&^!/gp         # append ^! to all other (merged) revs
Run Code Online (Sandbox Code Playgroud)

后缀告诉不要自动包含父母^!log