符号操作

2018-03-18  本文已影响0人  一江碎月

@

HEAD 的简写。

如:

$ git rev-parse @
39cacbb938eaab77d33f47a16d0a4e27e42d6a25
$ git rev-parse HEAD
39cacbb938eaab77d33f47a16d0a4e27e42d6a25
$ git cat-file -t 39cacbb938eaab77d33f47a16d0a4e27e42d6a25
commit

从中看出,@ 与 HEAD 完全指向同一个 commit 结点。


^

跟在提交结点之后 ,用于查看当前结点的祖先提交结点。

  1. 几个 ^ 就表示第几代祖先。如 ^ 表示父结点(即第一代祖先结点);^^ 表示祖先结点(即父结点的父结点),依次类推。

  2. ^num 表示当前结点的第几父结点,该语法只用于 merge 产生的结点。因为此种结点至少有两个父结点,^1 表示第一父结点(也即是合并是当前分支所在的结点),^2 表示第二父结点(即除 ^1 外的结点)。当结点没有多个父结点时,使用 ^num 会报错。如:

$     git rev-parse HEAD^2
HEAD^2
fatal: ambiguous argument 'HEAD^2': unknown revision or path not in the working tree.

~

用于查看当前结点的祖先提交结点。

  1. HEAD~ 与 HEAD^ 完全等价,都指向当前提交结点的父结点。使用多个 ~ 与 ^ 时,效果也完全一样。

  2. HEAD~num 与 HEAD^num 完全不一样。前者表示第几代祖先结点,后者表示当前结点的第几个父结点。

$     git rev-parse HEAD~2
9b335a39f65dff232f239c08baeeb9f7d27f193a
$     git rev-parse HEAD^2
HEAD^2
fatal: ambiguous argument 'HEAD^2': unknown revision or path not in the working tree.

第一个命令用于获取当前结点的祖父结点,第二个命令用于获取当前结点的第二个父结点(只不过当前结点没有)。

  1. 可以将 ~ 与 ^ 结合使用。如
$     git rev-parse HEAD~3^2

..

选出在一个分支中而不在另一个分支中的提交。

其格式为 branch1..branch2 表示在 branch2 分支中却不在 branch1 中的提交结点

$     git log dev..master

该操作会列出不在 dev 分支却在 master 分支中的提交结点。反过来,如果想查找在 dev 分支却不在 master 分支中的,可以写成 master..dev

  1. branch1 或 branch2 可以使用远程分支。如 git log origin/master..HEAD 表示远程 master 无但当前分支有的结点。

  2. 如果省略了其中的一边, Git 会默认为 HEAD。 如 git log dev..git log dev..HEAD 完全等价。

--not 与 ^

^ 跟在引用之前时,表示欲查询的提交不存储于该引用之中。 --not 与 ^ 类似。

要注意区分 ^ 位于引用之前与引用之后的区别。

如:

$ git log refA refB ^refC
$ git log refA refB --not refC

上述两个命令作用一样,都表示查询在 refA 或 refB ,但又不存在于 refC 中的结点。

因此,上面的 .. 命令也可用 --not 或 ^ 代替。下面三个命令是等价的,都表示查询存在于 refB 但不存在于 refA 中的提交:

$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA

^ 后跟的结点位置不一定处于最后,但 --not 位于最后。

...

用于获取只存在于一个引用中的提交。即两个引用的并集减去交集的部分。

如:

$ git log --left-right master...dev
commit < e46a0a492fa5a77a7709ba3d201c9a226297bce1
commit > db496c69ad86e2a4cb5f58a9da2b998498651080
commit > d7b0598e71391add76559f118186b39474468098
commit > 9b3a660fdeda67bd8dcf428719eaf84b1fb412f2

其中 --left-right 用于指向当前的提交到底属性哪个引用。< 表示属于 ... 前的引用,> 表示属于 ... 后的引用。

上一篇 下一篇

猜你喜欢

热点阅读