gpt4 book ai didi

git - 仅查看特定分支的 git 日志(带 merge )

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

我知道如何使用 --first-parent 查看特定分支的日志,如下所示:

git log --oneline --graph --first-parent origin/master origin/topic1

问题是我看不到那些指定分支之间的 merge 关系(这正是我想要的)。如果我这样做:

git log --oneline --graph origin/master origin/topic1

无论如何它都会显示所有 分支,即使我已经指定我只想看到其中的两个分支。

我想要的是能够指定特定的分支来查看的日志查看这些分支之间的 merge 。我需要这个的原因是因为有大量其他长期存在的分支导致图表变得巨大,我必须滚动几页才能找到分支关系。我需要一种方法来过滤掉它们。

这可能吗?

编辑

这是我的真实别名:

short-log-base = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset)%x09%C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset) %C(dim white)%an%C(reset) - %C(white)%s%C(reset)'
lgs = !git short-log-base --first-parent

我做了以下事情:

git lgs topic1 master

我意识到传递两个分支将显示这两个分支之间的提交,我真正想要它做的是只显示这两个分支以及它们之间的任何关系。所有其他祖先都应该被忽略而不显示。

当我运行上面的命令时,我没有看到图表在发生 merge 提交的那两个分支中的提交之间绘制线。

这只是我的噩梦日志图的一小部分示例(中间的片段):

| | | | | | | | | | | | | | | | | * 431ce45     (5 months ago)
| | | | | | | | | | | | | | | | | * 14a0211 (6 months ago)
| | | | | | | | | | | | | | | | | * 0afde13 (8 months ago)
| | | | | | | | | | | | | | | | | * 88872ab (3 weeks ago)
| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|/
|/| | | | | | | | | | | | | | | |
* | | | | | | | | | | | | | | | | f8f9efd (3 weeks ago)
* | | | | | | | | | | | | | | | | a65759b (3 weeks ago)
* | | | | | | | | | | | | | | | | 6814d25 (3 weeks ago)
* | | | | | | | | | | | | | | | | ca242b7 (3 weeks ago)
* | | | | | | | | | | | | | | | | d29f84c (3 weeks ago)
* | | | | | | | | | | | | | | | | 3e91342 (3 weeks ago)
* | | | | | | | | | | | | | | | | 5b23641 (3 weeks ago)
* | | | | | | | | | | | | | | | | 0e5e598 (3 weeks ago)
* | | | | | | | | | | | | | | | | f40e924 (3 weeks ago)
* | | | | | | | | | | | | | | | | 3614c05 (3 weeks ago)
| | | | | | | | | | | | | | | | | * b0b8f66 (3 weeks ago)
| | | | | | | | | | | | | | | | | * 5b9a183 (3 weeks ago)
| | | | | | | | | | | | | | | | | * 591af91 (3 weeks ago)
| | | | | | | | | | | | | | | | | * a1e6896 (3 weeks ago)
| | | | | | | | | | | | | | | | | * 9e12dc7 (3 weeks ago)
| | | | | | | | | | | | | | | | | * e7d4203 (3 weeks ago)
| | | | | | | | | | | | | | | | | * 5286952 (3 weeks ago)
| | | | | | | | | | | | | | | | | * a4e52b6 (4 weeks ago)
| | | | | | | | | | | | | | | | | * d1da806 (4 weeks ago)
| | | | | | | | | | | | | | | | | * 76b2174 (4 weeks ago)
| | | | | | | | | | | | | | | | | * 48b0687 (4 weeks ago)

我根本不知道为什么会显示这么多分支,而就我而言,我只想查看两个分支之间的图表。如果让它工作意味着限制历史的长度,那么请务必告诉我如何做到这一点。

最佳答案

你没有看到“额外”的分支

您看到额外分支的唯一原因是因为这些分支是您在命令行中指定的分支的祖先。为了演示,这是我的日志的样子:

$ git log --oneline --graph --decorate master temp -14
* 458e836 (HEAD, master) Add narf.txt <===== Here is master
* 03bbab7 Merge branch 'bar'
|\
| * a765ecc (bar) Add quack.txt <===== Here is bar
| * 80efc7c Add moo.txt
* | b1bc4f1 Add junk
|/
| * acb480b (temp) Add stuff after merge commit <===== Here is temp
| * 1e4b626 Merge branch 'foo' into temp
| |\
| | * 06c40a1 (foo) Add even more junk <===== Here is foo
| | * ea3ea46 Add foo.txt
| |/
| * e918c72 Add derp.txt
| * f1a74d8 Add lol.txt
| * c244486 Add foo.txt
|/
* 7c61796 Fix OS X Bash `workdir` alias for new terminal tabs

请注意,尽管我只在命令行上指定了 mastertemp,但是 barfoo 是也显示出来,因为它们是其他分支的祖先,因此是它们历史的一部分。

你可能不想为此使用--no-merges...

此外,我不建议您使用 --no-merges 来尝试可视化您的分支,因为有时您可能会无意中遗漏有关分支之间何时发生 merge 的重要信息旗帜。为了演示,当我使用 --no-merges 时,上面显示的图表会发生以下情况:

$ git log --oneline --graph --decorate --no-merges master temp -11
* 458e836 (HEAD, master) Add narf.txt <===== Here is master
* a765ecc (bar) Add quack.txt <===== Here is bar
* 80efc7c Add moo.txt
| * b1bc4f1 Add junk <===== Which branch does this belong to?
|/
| * acb480b (temp) Add stuff after merge commit <===== Here is temp
| * 06c40a1 (foo) Add even more junk <===== Here is foo
| * ea3ea46 Add foo.txt
| * e918c72 Add derp.txt
| * f1a74d8 Add lol.txt
| * c244486 Add foo.txt
|/
* 7c61796 Fix OS X Bash `workdir` alias for new terminal tabs

请注意,您现在无法判断提交 b1bc4f1 Add junk458e836 Add narf.txt 的祖先。看起来 b1bc4f1 Add junk 不是 master 的一部分,但实际上它是。

改用--first-parent

如果您想简化分支历史可视化,我建议您改用--first-parent 标志:

git log --oneline --graph --decorate --first-parent origin/master origin/topic1

这是我的图形日志看起来像使用它而不是 --no-merges:

$ git log --oneline --graph --decorate --first-parent master temp -9
* 458e836 (HEAD, master) Add narf.txt <===== Here is master
* 03bbab7 Merge branch 'bar'
* b1bc4f1 Add junk
| * acb480b (temp) Add stuff after merge commit <===== Here is temp
| * 1e4b626 Merge branch 'foo' into temp
| * e918c72 Add derp.txt
| * f1a74d8 Add lol.txt
| * c244486 Add foo.txt
|/
* 7c61796 Fix OS X Bash `workdir` alias for new terminal tabs

这实际上准确地代表了所有分支的最终历史,同时还通过 stash 中间提交来简化图表。

关于git - 仅查看特定分支的 git 日志(带 merge ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823768/

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