如何使用git log命令在GIT分支中获取合并文件列表以及其他提交?例如,下面给出了示例命令,
git log --after =“2016/11/29”--before =“11/20/2016”--pretty ='format:%cd%h' - name-status --date =短本地
答案 0 :(得分:1)
来自评论:
合并文件表示通过合并(来自其他分支)的提交。
所以,你真正想要的是从第二个到 n 找到可达的提交第三次合并提交的父母 M ,不包括从 M 的第一个父级可以访问的所有提交。
普通合并提交有两个父项M^1
和M^2
(此语法来自gitrevisions)。因此,如果合并提交M
包含99个父项,则它们为M^1
,M^2
,M^3
,依此类推,直至M^99
。我们使用^
(帽子或插入符号)后跟一个数字 N ,在任何提交说明符之后编写,说" N 该提交的父母"。 commit-specifier通常只是一个原始哈希(从git log
输出):face0ff
。
要排除提交,我们会在其前面添加相同的^
(帽子或插入符号)字符。如果M
有99个父母,我们会写^M^1 M^2 M^3 M^4 ... M^99
。但目前,我们可以假设两个父母,而不必一直计算到99。
因此,我们只需找到--since
的哈希ID - 而不是--until
和--after
(又名--before
和M
),而不是face0ff
和git log [options ...] ^face0ff^1 face0ff^2
39;结果说它毕竟是M^@
并运行:
^M^1
(有一种特殊的,更通用的语法,即使对于Git'章鱼合并也可以使用#34;就像99-父母一样:我们写*
来选择所有这些语法然后,为了排除第一个,我们添加...--o--*--o---------X <-- develop
\
A--B--C--D--E <-- feature
。可以排除我们已经包含的内容:排除最终覆盖。)
给出一系列提交(左侧较旧的提交,右侧较新,并在存储库中显示两个分支名称,并且我已经给出了特别有趣的提交字母名称或develop
标记):
feature
我们将在分支...--o--*--o---------X--M <-- develop
\ /
A--B--C--D--E <-- feature
上创建一个新的合并提交,它会引入分支develop
独有的五个提交:
feature
之后我们可能会或可能不会在...--o--*--o---------X--M--o--o <-- develop
\ /
A--B--C--D--E
上提交更多提交内容,甚至可能会删除分支名称 A
:
E
提交本身 - develop
到develop
- 永久保留在图表中,受M
名称保护(并且可访问),因为我们可以从M
向后工作找到X
,*
有两个父母。
当我们进行合并时,任何合并的第一个父项始终是 分支的提示。在这种情况下,最重要的是提交*
。所以我们毕竟对第一个父母不感兴趣;我们想要第二个父。 1
现在,请注意提交A
。这(显然,从图的可视化)两个子分支分开的点。关于提交E
的特别有趣的事情是它位于两个分支上。即使之前我们制作也是如此合并提交。 2 之后仍然如此,但在之后我们进行提交,合并导致提交develop
到*
在分支上A-B-C-D-E
也是!也就是说,提交*
- 和之前的总是在该分支上,但提交develop
&#34;加入&#34;一旦我们合并了。他们现在在两个分支上,就像在合并之前提交M
一样。
如果您愿意,您可以将提交(包括合并提交)视为铁路线路上的停靠点,并且轨道仅以一种方式运行:从今天到过去。如果您在X
的顶端登上火车,当您到达铁路站E
时,您可以选择:直接返回&#34;到E
,或者去&#34;向下和向后&#34;到D
。如果您转到A
,您将可以通过X
到达*
栏杆,但如果您返回git log
,则会跳过这些站点。不管你走哪条路,如果你继续,你最终会到达铁路站M
。
*
的工作方式是“走出轨道”#34;从今天回到过去,向您展示每个&#34;铁路站点&#34; (承诺)一路走来。当它到达像git log
这样的分支时,它需要两个路径(并以某种顺序 3 显示它们两者)。最终叉子重新加入(在提交M^1
)并且它可以返回显示沿一条路线而不是两条或更多路线的停靠点。
但是,如果您告诉M^1
停止向您显示某些提交,它(当然)将停止显示这些提交。这是一个棘手的部分:它不仅停止那些提交,而且所有早期的提交。所以我们用它。我们说:&#34;只要您提交了^M^1
本身或提交 git log
的提交 ,停止遍历 历史记录。&#34;
因此,*
是一种告诉M^2
的简单方法:&#34;不要告诉我提交git log
或更早的内容。&#34;使用M^2
告诉*
:&#34;当你找到提交给我的时候,请从提交M^1
查看。&#34;我们不必须自己找到提交*
:我们必须意识到从{{1}}最终到达 {{ 1}}。
此&#34;可达性&#34;想法是理解Git的关键。
1 如果这是一个章鱼合并 - Git调用任何与三个或更多父母的合并 - 我们大概也想要额外的父母。
2 这是关于Git的一个奇怪的事情。在其他版本控制系统(VCS)中,当您创建分支时,它会获得某种独特的唯一性,从那时起,在该分支上进行的新提交只能在该分支上进行。即使在合并之后,在其他VCS中仍然存在:只有在某个特定分支上进行的提交才会在该分支上进行;那些提交始终在该分支上。这在Git中并不正确,因为在Git中,我们可以移动分支名称,甚至完全删除它们。提交本身保持不变,但名称改变了!
3 你应该立即问:等待,什么订购?但答案必须转到其他地方。我在这里要说的是,排序由更多选项控制。