美文网首页
Git ~和^的区别

Git ~和^的区别

作者: 伊凡的一天 | 来源:发表于2018-05-15 16:07 被阅读51次

在使用git rebase命令时,我们常常想要rebase到HEAD的前n个commit,通常我们使用如下命令:

git rebase -i HEAD~n

然而有时候我们能看到这样的表达方式:

git rebase -i HEAD^1

那么~和^的区别在哪里呢?我们首先看一下这张图:


image.png

我们可以看到,最新的commit为HEAD,那么HEAD的前一个commit就为HEAD~1,HEAD的前两个commit就为HEAD~2。。。

注意从HEAD~3上新开了一个分支,并出现一个蓝色的commit。之后进行merge操作,蓝色的commit和HEAD~2合并成一个新的commit:HEAD~1。

此时我们可以看到HEAD~1实际上拥有了两个parent,第一个parents是HEAD~2,第二个parent则是蓝色的新分支上的commit,那么此时就是^符号使用的场景了。

^符号表示某个commit父commit所在层中的第几个parent,由于HEAD~1拥有两个父亲commit,因此这儿就需要使用^符号表示图中蓝色的commit,即HEAD~1^2。

下图能够更清晰的表现出commit树的概念:


image.png

其中commit G可以这样表示:

A~3

或者这样表示:

A~2^1

commit H则可以这样表示:

A~2^2

总结一下:

  • ~2表示沿着commit树向上搜索两层,并获得该层的第一个commit(如果该层有多个commit的话)
  • ^2表示获得某个commit的第2个父commit(merge两个分支后产生的merge commit就拥有两个父commit)

相关文章

网友评论

      本文标题:Git ~和^的区别

      本文链接:https://www.haomeiwen.com/subject/ehfydftx.html