假设我有一个'主人'分支机构,审查和分支机构我的团队批准的更改(称之为“阶段”),以及一系列基于阶段分支的功能分支。 (我们的想法是将更改分组为从舞台到主节点的常见拉取请求。)
如何根据" root"显示所有更改的日志?舞台分支?我希望能够看到该团队/主题的所有功能正在进行中。在vanilla Git术语中,如何获取可以达到给定(root)提交的所有提交的日志?对于我的生活,我找不到办法做到这一点。我可以为具有共同祖先的两个分支执行此操作,但不适用于从共同祖先派生的 N 分支。
答案 0 :(得分:0)
我认为这可以通过使用std::vector
(正如问题评论中的torek所建议的)和git branch --contains <id>
的组合来完成。
具体来说,假设您对所有感兴趣的分支都有本地分支(如果没有,请尝试将git rev-list
或-r
添加到-a
命令),然后以下应该做我认为你想要的事情:
git branches
$ git rev-list $(git branches --contains <ancestor>) --not <ancestor> --pretty=oneline
rev-list
是一个命令,它将列出所有可从某些父母而非其他父母访问的修订。
在上面的调用中,我们使用包含给定祖先的所有分支的列表作为起点,然后排除该祖先之前的所有历史记录。
添加git
告诉命令包含提交的简要描述;它通常只会输出每行一次的修订ID。
请记住,这可能不会完全符合您的要求,因为我认为提交是按时间顺序排序的,而不是通过提交的拓扑图。
--pretty=oneline
有一个大数量的选项,因此可能有一个可以控制该排序。
如果你真的想要列出所有具有给定祖先的提交,那么有一种更强力的方法(尽管它将包括其他无法访问的提交和存储)。
我们再次使用git rev-list
,但不是传递有趣分支列表,而是指定rev-list
:
--all
答案 1 :(得分:0)
如何获取可以到达给定(root)提交的所有提交的日志?
git log --ancestry-path --all --not $given
使用您想要的任何显示选项。 --graph --decorate --oneline
是通常的起点,--simplify-by-decoration
显示尽可能少的未装饰提交,同时仍显示分支结构。
答案 2 :(得分:-1)
我遇到了同样的问题。 谷歌搜索并没有带来适合的东西,所以我决定写一个剧本。 https://gist.github.com/lvitya/66a9f519d30b7fd2c90d8f95a0b3a1a1
或者使用下一个代码:
#!/bin/bash -x
# $1 == ancestor
BR_LIST=$(git for-each-ref --contains "$1" --format="%(refname)")
git log "$1"^! $BR_LIST --oneline --decorate --graph
这将生成从给定祖先开始的所有提交的图表。也就是说,您可以根据公共主分支查看所有功能分支。
$ ~/scripts/git_show_graph_from_ancestor.sh master
* feature2
* commit
* commit
| * feature1
| * commit
|/
* master