git中的~和^有什么区别?

7

我曾经提出过这个问题,但我仍然不知道该回答中的 ~ 和 ^ 代表什么:

如果你在谈论远程分支,比如 origin/master,你可以使用 ~ 和 ^ 来相对于分支引用祖先提交,就像在本地分支中一样。

它们之间的区别是什么?


5
为什么不选择Zoidberg?(我的意思是,为什么不看一下manpage!) - Nevik Rehnel
3个回答

7

^表示“(第一个)父级”,~类似,但它需要一个数字作为参数,基本上表示“祖先”。因此,例如:

HEAD            = latest commit
HEAD^  = HEAD~1 = parent of latest commit
HEAD^^ = HEAD~2 = grandparent of latest commit
HEAD~100        = 100th ancestor of latest commit

8
值得一提的是标识符(identifier)如HEAD^2的含义。它与其他有多个父节点的提交不同,代表的是第二个父节点。请注意,这里不进行解释。 - alkalinity

5
根据这份文档,波浪线(~)表示提交版本的线性先辈(父亲,祖父,曾祖父),而插入符号(^)则表示多个父级。如果存在多个合并祖先,则每个合并源都将成为一个父级。

这个答案是正确的。"被接受"的答案是不正确的。 - midenok

4

manpage中所述:

<rev>^,例如HEAD^,v1.5.1^0
修订参数后缀^表示该提交对象的第一个父对象。^<n>表示第个父对象(即<rev>^等同于<rev>^1)。[...]

<rev>~<n>,例如master~3
修订参数后缀~<n>表示命名提交对象的第代祖先提交对象,仅遵循第一个父对象。即<rev>~3等同于<rev>^^^,相当于<rev>^1^1^1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接