我知道如何使用 --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 log(带 merge ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22823768/

10-15 14:54