在一篇涵盖相对提交引用的Udacity课程中,它说:
^表示父提交,〜表示第一个父提交
^和〜之间的主要区别在于提交时 从合并创建。合并提交有两个父母。合并 commit,^引用用于表示第一个父级 提交,而^ 2表示第二个父级。第一个父母是 你运行git merge时你所在的分支,而第二个父代是 合并的分支。
根据课程,基于git log --graph --oneline
的以下输出,相对于(最顶部,带头指针)commit {{1},SHA f69811c
的提交为HEAD~4^2
}}
所以HEAD~4本身意味着第一个父母,而^ 2意味着它也是第二个父母?这些东西不要相互矛盾吗?任何澄清都表示赞赏。
答案 0 :(得分:8)
X~n
表示:n
的{{1}}祖先。
X
表示:X^
的父级。这相当于X
。
如果X~1
有多个父级,则需要在使用X
表示法时区分它们。因此^
将是第一个父级,X^1
将是第二个父级,依此类推。 X^2
相当于X^
(也相当于X^1
)。
在您的示例中,从提交X~1
开始,即9ec05ca
:
HEAD
为db7e87a
(或HEAD~1
)。HEAD^
为796ddb0
(或HEAD~2
)。HEAD^^
是1a56a81
(或HEAD~4
,但没有人会使用它。)HEAD^^^^
,e014d91
的第一个父,是1a56a81
,HEAD~5
或HEAD~4^
。HEAD~4^1
,f69811c
的第二个父,为1a56a81
。答案 1 :(得分:1)
+娜塔莉:这不是完全错误的,但它有点太短了:因为"〜"运算符正在执行深度搜索(第n个祖先,它实际上对应于单个分支上的第n个最后一次提交),如果它们中有很多,则它的参数不能指定父级。因此,它假设它应该始终遵循它们中的第一个。这与我们讨论父订单的your other question相关。