git log - 分支是否有效?

时间:2011-03-15 19:19:01

标签: 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
| 

假设我想按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
|  

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

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

5 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:12)

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

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

第三,我可以解释为什么git log --branches=mybranch不起作用。 git-log(1) man page说:

--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.

最后一句是关键点。如果<pattern>只是mybranch,那么就没有全局字符,因此git-log会将其解释为您输入的内容

git log --branches=mybranch/*

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

有一个肮脏的黑客可以阻止假设/*

git log --branches=[m]ybranch

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

git log mybranch

答案 2 :(得分:3)

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

  d -- e [refs/tags/release1]
 /
a -- b -- c [refs/heads/master]
      \
       f -- g [refs/heads/dev1]
        \
         h [refs/heads/dev2]

如果git log --branches git log master dev1 dev2 git log release1 --branches=dev*,那么您将看到提交a,b,c,f,g和h。如果您git log release1 dev1 dev2 {{1}},则与{{1}}相同。你会看到a,d,e,b,f,g和h,但不是c。

答案 3 :(得分:3)

  

有没有人知道如何成功使用此命令?

     

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

为了可视化所有分支和遥控器上的提交图,请执行以下操作:

$ git log --graph --branches=* --remotes=* --decorate

将此选项与其他git-log选项一起使用以控制详细程度,例如: --oneline--name-status

您可能必须先获取远程更改才能看到它们。您可以获取所有远程更改,而无需将它们应用到您当前的分支:

$ git fetch --all

答案 4 :(得分:1)

--branches

的说明

git log <commit>列出了您在命令行中列出的任何<commit>可以访问的所有提交。

  • --all做同样的事,但假装您在refs/中列出了所有裁判。

  • --branches[=<pattern>]会做同样的事,但假装您在refs/heads中列出了所有裁判。它还允许您使用glob模式进行限制。作为一个问题,如果您的glob模式缺少?,[,那么最后会隐含/

实施例

git log topic1 topic2 topic3

表示列出从topic1topic2topic3可以访问的所有提交。

git log -all

表示列出从git show-ref输出的任何引用可以访问的所有提交。

git log --branches="topic*"

表示列出从前缀topic开头的任何分支可以访问的所有提交。

来源

https://schacon.github.io/git/git-log.html

https://schacon.github.io/git/git-rev-list.html