如何限制git log报告的提交范围?

时间:2018-08-30 14:47:29

标签: git

我正在尝试通过以下几行检查哪些提交合并到两次提交之间的原点中:

git log --merges --first-parent --oneline origin 7284b1a6dea454c2023efb709a31ee9dbcde8de6..79764fa47dde40ed8aecf203a606e64409e3f895

7284b1a6dea454c2023efb709a31ee9dbcde8de6的历史中,79764fa47dde40ed8aecf203a606e64409e3f895的提交早于origin

但是由于某种原因,它会将所有内容退还给用户,而不是将其限制在这两个SHA之间的提交范围内。

The docs建议将其限制在以下范围内:

  

仅显示指定修订范围内的提交。如果未指定<revision range>,则默认为HEAD(即导致当前提交的整个历史记录)。 origin..HEAD指定从当前提交(即HEAD)可访问的所有提交,但不是从origin可以访问的所有提交。有关拼写方式的完整列表,请参见gitrevisions [7]的“指定范围”部分。

更多here

  

^ r1 r2设置操作经常出现,以至于它有一个简写形式。当您有两个提交r1和r2(根据上面的“指定版本”中所述的语法命名)时,可以要求从r2可以到达的提交(不包括从r1到^ r1 r2可以到达的提交),可以将其写为r1。 .r2。

我在做什么错?如何防止在79764fa47dde40ed8aecf203a606e64409e3f8HEAD之间发生的列表合并?

[编辑]

为清楚起见,历史看起来像这样...

  o   HEAD
  |  
  o  
  |  
  o   79764fa47dde40ed8aecf203a606e64409e3f895
  | 
  o 
  | 
  o 
  | 
  o 
  | 
  o 
  | 
  o   7284b1a6dea454c2023efb709a31ee9dbcde8de6
  | 

2 个答案:

答案 0 :(得分:3)

  

我正在尝试检查两次提交之间哪些分支合并到了原点中[...]我在做什么错?

您要指定origin作为提示。您使用7284b1a6..79764fa4指定了您真正想要的范围的基数和范围,(解析为这两次提交的所有拼写都可以),git log不需要查找远程URL,因此不会在此处检查远程名称,它只是解析所有内容以提交ID。

答案 1 :(得分:0)

除了已经包含的选项外,还尝试使用选项“ --graph

git log --graph --merges --first-parent --oneline origin 7284b1a6dea454c2023efb709a31ee9dbcde8de6..79764fa47dde40ed8aecf203a606e64409e3f895

编辑:实际上,对于--first-parent,它不应显示更多信息)。

首先,这取决于您的HEAD当前所在的位置。您的日志返回到HEAD的事实可能是偶然的。 HEAD实际上指向您用git checkout签出的最后一件事。

此外,git log a..b(实际上是log或任何其他命令)返回“从 b 可以访问并且不可可以访问的所有内容来自 a »。这意味着,如果您的历史记录如下所示:

  o     o b
  |     |
a o     o
  |     |
  o     o
  |     |
  o     o
  |     |
  o     o
  |     |
  o     o
  |     |
  o     o
   \   /
    \ /
     o
     |
     o
     |
     o
     |
     o

然后git log a..b实际上将为您提供合并点之后右侧分支上的全部7个提交。按时间顺序排列的时间戳记在这里无关紧要,起初并不能强行清除,因为没有任何选择,日志将把提交集显示为平面列表。