仅查看某些分支的git log(带合并)

时间:2014-04-02 21:47:47

标签: git

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

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

这个问题是我没有看到指定的那些分支之间的合并关系(这就是我想要的)。如果我这样做:

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

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

我想要的是能够指定特定的分支来查看的日志,看看这些分支之间的合并。我需要这个的原因是因为有很多其他长寿命的分支导致图形变大,我必须滚动几个页面才能找到分支关系。我需要一种方法来过滤它们。

这可能吗?

修改

以下是我的实际别名:

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

我意识到传入两个分支会显示这两个分支之间的提交,我真正希望它做的就是向我展示那两个分支以及它们之间的任何关系。所有其他祖先都应该被忽略而不显示。

当我运行上面的命令时,我没有看到这两个分支中提交合并提交的提交之间的图形绘制线。

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

| | | | | | | | | | | | | | | | | * 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)

我根本不知道为什么这么多分支被展示出来,就我而言,我只想看到两个分支之间的图形。如果让这个工作起作用意味着限制历史的长度,那么请通过各种方式告诉我如何做到这一点。

2 个答案:

答案 0 :(得分:1)

你没有看到“额外”分支

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

$ 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来尝试可视化您的分支,因为您有时可能会无意中遗漏有关何时使用该标志进行分支合并的重要信息。为了演示,当我使用--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的一部分,实际上它是。{/ p>

首选<{1}}

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

--first-parent

这是我的图表日志使用的而不是git log --oneline --graph --decorate --first-parent origin/master origin/topic1

--no-merges

这实际上准确地表示了所有分支的最终历史记录,同时也通过隐藏中间提交来简化图形。

答案 1 :(得分:0)

尝试git show-branch <list of branches>

这将只显示那些分支,直到它们的合并点。它在“每日GIT有20个命令或所以”指南中提到。

手册页中的示例显示了三个分支:直到'---'的第一行是分支,显示了它们将被标记在哪一列;然后是您在选项中给出的顺序中的相关提交,其中包含一个标记,其中包含提交的分支。

相关问题