Git日志图表,显示两个分支如何分叉

64
我们希望查看两个分支分离的图表。运行 git log --oneline --graph 只显示当前分支。如何将两个分支都包含在这张图表里?
3个回答

81

git log 命令接受零个或多个提交记录作为参数,展示指定提交记录之前的历史记录。当没有指定参数时,默认使用 HEAD。在你的情况中,你需要提供你想要比较的两个分支的最新提交记录:

git log --graph --oneline currentbranch otherbranch

如果显示的内容不太多,您可以通过使用简化此过程

git log --graph --oneline --all

这个命令就好像你已经指定了 .git/refs 中的每一个引用作为要显示的提交。


3
这两个命令显示整个历史记录。有没有一种方法可以仅绘制自分支点以来每个分支上的更改? - John
5
我认为您想要的是 git log --graph --oneline 当前分支...另一个分支,它会显示从两个分支头中的一个可到达的所有提交记录,但不包括同时可到达的提交记录。请注意,这里的三个点是必需的。 - chepner
7
使用该命令后,分支结构将不会出现在输出中。相反,提交记录将呈现为一个平面列表,就好像没有使用 --graph 选项一样。 - John
很好的别名:cmp = log --graph --online HEAD 可以使用 git cmp OTHERSHA - Chris Pfohl

41

我曾遇到相同的问题并来到这里,但没有任何答案帮助我展示两条分支正在如何分叉。最终我自己进行了实验并发现这个方法可行。

假设有分支A和分支B,我想看看它们在哪里开始有所不同。

git log --oneline --graph --decorate A B `git merge-base A B`^!

注意:不要忘记末尾有^!。(它会排除merge-base返回的提交的父提交。)

更新

如果存在多个合并基,则上述单行命令将不起作用。在这种情况下,请执行以下操作:

git merge-base A B -a
# e.g. output XXXX YYYY
git log --oneline --graph --decorate A B --not XXXX^ YYYY^

7
这应该是首选方案,正是我在寻找的。 - Jay West
如果有人想要一个别名,这里是。在Bash 5.0.18 macOS Mojave上测试通过。diverge =“!f(){if [[ $# -lt 1]] || [[ $# -gt 2]]; then>&2 echo \”Usage:git diverge BRANCH1 [BRANCH2]\“;返回1; fi; branch1 = \”$ 1 \“; branch2 = \”$ {2:-HEAD} \“; base = \”$(git merge-base \”$ branch1 \“\”$ branch2 \“)\“ && git lg1-specific \”$ branch1 \“\”$ branch2 \“\”$ base ^!\“; }; f“ - Harrison McCullough

-2
git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

3
两个请求。1. 请提供一个简化版本,回答问题而不提供额外的功能。2. 请解释如何仅显示两个分支而不是所有分支。
  1. 简化版本:能回答问题但不提供额外功能。
  2. 如何只显示两个分支而非全部分支的方法。
- Shaun Luttin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接