gpt4 book ai didi

Git 日志 : list all parents commits

转载 作者:太空狗 更新时间:2023-10-29 14:13:58 26 4
gpt4 key购买 nike

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

当前的历史类似如下:

                       (master)
B------Merge1--Merge2--Merge3
/ / /
- -C1 / /
- - -C2 /
- - -C3----------C4

Merge 提交是 merge pull 请求的结果,而 C 提交来自此存储库的复刻。

git log 显示如下内容:

git log --oneline master
Merge3
Merge2
Merge1
B

但我真正感兴趣的是 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

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

最佳答案

如果您不使用 --no-ff 进行 merge 和 pull ,那么在分支提示处进行实际 merge 提交将是一个不可靠的指标,因此如果您只是不想查看 merge 提交,

git log --no-merges --oneline -n 10   # or --since, or something, might do 

如果你想根据提交属性决定返回列表的距离 rev-list 没有作为内置的截止标准,这只是在 rev-list 的输出中过滤这些属性的问题 或更一般地一些 log --pretty=format: 选择,这里仅列出从 merge 分支到选定分支的提示,得到 C1-C2-C4——因为我无法弄清楚你是如何决定绕过 C4 ...

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

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

^! suffix告诉 log 不要自动包含 parent 。

关于Git 日志 : list all parents commits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19441399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com