我似乎无法让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
。有谁知道如何成功使用这个命令?
编辑:我想要做的就是获取一个或另一个分支的日志,而不必先进行结账。
答案 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
表示列出从topic1
,topic2
或topic3
可以访问的所有提交。
git log -all
表示列出从git show-ref
输出的任何引用可以访问的所有提交。
git log --branches="topic*"
表示列出从前缀topic
开头的任何分支可以访问的所有提交。