GIT中的点牙点符号

时间:2014-04-10 15:54:39

标签: git

以下git语法是什么意思:6df7640^.. 我在那里见过:http://git-scm.com/book/ca/Git-Internals-Maintenance-and-Data-Recovery

我在http://schacon.github.io/git/git-rev-parse.html中查找了这种语法说明,但没有找到答案。

2 个答案:

答案 0 :(得分:3)

插入符号表示以前的版本。 ..表示“从 - 到”,省略“到”部分只需要HEAD。

所以6df7640^..表示从6df7640HEAD的父提交。

答案 1 :(得分:1)

blackbuild所说的要多一些。 gitrevisions(7)手册已经完成了所有内容,但它的语言有点干,让我们试着详细说明。

插入符号

插入符号^实际上是指它所遵循的提交的第一个父级。

这个想法是合并提交有多个父级(Git甚至支持所谓的"章鱼和#34;合并,其中多个分支被合并到另一个分支,以便产生的合并提交超过两个父母)。

如果您想要选择第二个父级(合并的内容),第三个父级^2,依此类推,则可以使用^3

..范围运算符

A..B符号再次并不意味着从A到B"这些简单的事情。手册将其定义为

  

<rev1>..<rev2>

     

包含可从<rev2>访问的提交,但不包括可从<rev1>访问的提交。

......略高于

  

^<rev>

     

排除可以从(即祖先)到达的提交。

正如你所看到的那样,&#34;来自&#34;也不是&#34;到&#34;提到了。

那是因为Git历史是一个有向非循环图,而不仅仅是提交的时间线,因此Git历史遍历命令(接受这样的范围)在提交集上运行,没有时间线。现在提出了#34;提交可达性&#34;的概念:如果你指向存储库的历史图上的任意提交,你可能会从那里追逐那个提交的父提交,它们的父提交等等。因此,给定历史记录的DAG上的单个提交,您可以从该那个获得所有提交可到达的子图。从逻辑上讲,所有这些提交都构成了由&#34; anchor&#34;维护的代码库的状态。提交。

现在,如果你想限制构成子图的提交集,比如说,出于历史检查的目的,你必须修剪该子图的不感兴趣的部分。这正是上面提到的前缀 ^排除运营商所做的事情。

因此<rev1>..<rev2>是Subversion难民的另一种<rev2> ^<rev1>形式。第二种,更通用的形式有趣的是,虽然对于像

这样的简单案例
...-A-B-C-D-E-F

两种形式,B..EE ^B都会产生完全相同的结果,对于更复杂的情况,例如

...-X-Y-Z
         \
...-A-B-C-D-E-F
        /
 ...-U-W

CD是合并提交)他们将产生不同的结果,因为B..E不会修剪固定在Z和{{1}的子图如果你也想修剪它们,你可以使用W - &#34;双点&#34;形式无法做到。

E ^B ^Z ^W范围运算符和..

另一件值得注意的事情是,对于git diffgit diff运算符与历史遍历..之类的命令不同。这是一个微妙的区别,特别是如果在git log的左侧使用<rev>^之类的内容。

不同之处在于,..始终只考虑两个修订版:对于git diff,它仅考虑A..BA而不关心它们之间的提交,如何{ {1}}和B在拓扑上相关,即使它们完全相关(一个可以与另一个相关)。

因此,在使用A时始终只使用两个单独的修订版参数会更好,例如Bgit diffgit diff A B进行比较。