git log - 分支是否有效?

cfl*_*wis 32 git

我似乎无法git log --branches正确过滤其输出.似乎Git忽略了它.

例如git log --graph --all --decorate,打印头:

* commit 3ae0d17538f787bdde68f37f6644ffe9652d8dc1 (HEAD, feature/branch-ignore)
| Author: Chris Lewis <chris@chris.to>
| Date:   Mon Mar 14 17:39:56 2011 -0700
| 
|     Ignore merge commits, as they're going to be duplicating events
|  
* commit 770534e9d77acb03eaf842440c879aec1c5b5500
| Author: Chris Lewis <chris@chris.to>
| Date:   Tue Mar 8 14:39:40 2011 -0800
| 
|     Removed another remote branch check
| 
Run Code Online (Sandbox Code Playgroud)

假设我想过滤master,这应该意味着忽略这些提交.的负责人git log --graph --all --decorate --branches=master还是:

* commit 3ae0d17538f787bdde68f37f6644ffe9652d8dc1 (HEAD, feature/branch-ignore)
| Author: Chris Lewis <chris@chris.to>
| Date:   Mon Mar 14 17:39:56 2011 -0700
| 
|     Ignore merge commits, as they're going to be duplicating events
|  
* commit 770534e9d77acb03eaf842440c879aec1c5b5500
| Author: Chris Lewis <chris@chris.to>
| Date:   Tue Mar 8 14:39:40 2011 -0800
| 
|     Removed another remote branch check
|  
Run Code Online (Sandbox Code Playgroud)

Git似乎没有过滤.是否--branches与其他参数一起传递似乎没有任何区别.我的Git版本是git version 1.7.4.1.有谁知道如何成功使用此命令?

编辑:我想要做的就是获取一个或另一个分支的日志,而不必先进行结账.

Ada*_*ers 15

首先,(另一个)亚当是正确的,因为它没有意义--all:如果你只想看到一个像你的问题状态的分支,为什么要求所有分支?

其次,正如其他答案的评论中所述,你不需要--branches; 只是做git log mybranch.

第三,我可以解释为什么git log --branches=mybranch不起作用.该git-log(1)手册页说:

--branches[=<pattern>]
    Pretend as if all the refs in refs/heads are listed on
    the command line as <commit>. If <pattern> is given, 
    limit branches to ones matching given shell glob. If 
    pattern lacks ?, *, or [, /* at the end is implied.
Run Code Online (Sandbox Code Playgroud)

最后一句是关键点.如果<pattern>就在mybranch那时没有通配符,那么git-log就像你输入的那样解释它

git log --branches=mybranch/*
Run Code Online (Sandbox Code Playgroud)

它只匹配下面的引用$repo/.git/refs/heads/mybranch/*,即以开头的分支mybranch/.

有一个肮脏的黑客来阻止/*假设:

git log --branches=[m]ybranch
Run Code Online (Sandbox Code Playgroud)

但是我想不出有什么理由要你这么做而不仅仅是打字

git log mybranch
Run Code Online (Sandbox Code Playgroud)

  • @Emmel`git log branch1 branch2` (2认同)

Ada*_*ruk 13

因为您指定了--all,所以覆盖您所做的任何分支规范.

  • 缺乏警告似乎对我来说是一个可用性错误. (4认同)
  • @Lewisham:如果你只想要掌握,请使用`git log master`. (3认同)
  • 正如我在问题中所提到的,如果我使用其他标志,它似乎没有任何区别.`git log --branches = master`给出了相同的提交(显然格式不同).它只是不起作用. (2认同)

sho*_*lte 8

假设你的历史看起来像这样

  d -- e [refs/tags/release1]
 /
a -- b -- c [refs/heads/master]
      \
       f -- g [refs/heads/dev1]
        \
         h [refs/heads/dev2]
Run Code Online (Sandbox Code Playgroud)

如果你这样做git log --branches是一样的git log master dev1 dev2,所以你会看到提交 a,b,c,f,g 和 h。如果你这样做了,git log release1 --branches=dev*它与git log release1 dev1 dev2. 您会看到 a、d、e、b、f、g 和 h,但不会看到 c。

  • 这个例子“git log master dev1 dev2”很有帮助。谢谢! (2认同)