在共享的GitHub存储库中,我想使用git log
来显示最近提交的列表。
目前的历史记录与以下内容类似:
(master)
B------Merge1--Merge2--Merge3
/ / /
- -C1 / /
- - -C2 /
- - -C3----------C4
Merge
提交是合并拉取请求的结果,而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
,但我发现无法禁用或反转它。
答案 0 :(得分:2)
如果您没有进行合并并且使用--no-ff
在分支提示处进行实际的合并提交将是一个不可靠的指标,所以如果您只是不想看到合并提交,< / p>
git log --no-merges --oneline -n 10 # or --since, or something, might do
如果你想根据提交属性确定返回列表的距离,则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
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
不会自动包含父母。
答案 1 :(得分:0)
一种可能的解决方案是使用--graph
然后使用一些sed和grep魔法。
这种方法很有效,但它很骇客,希望git-log
能为我做到这一点!
我认为需要其他选项来显示正确的顺序,而不是提交日期。
git log --oneline --graph \
| sed -e 's|[^a-z0-9]*||1' \
| egrep -v '^[a-z0-9]+ Merge' \
| egrep -v "^$"
第一个sed
删除了分支&#34; ascii art&#34; --graph
模式输出。
第一个grep
删除所有合并提交。
第二个grep
删除空行。