脱字符(^)是什么意思?

我在这里看到一个问题的答案 ,帮助恢复在git中删除的文件。

解决scheme是

git checkout <deleting_commit>^ -- <deleted_file_path> 

插入符号( ^ )做了什么? 我在其他地方看过,在git中做非常有用的事情。 这是神奇的。 有人请为我破坏它,告诉我它是干什么的?

HEAD^表示当前分支顶端的第一个父项。

请记住,git提交可以有多个父代。 HEAD^HEAD^1缩写,您也可以根据需要定位HEAD^2等等。

你可以到任何提交的父母,而不仅仅是HEAD 。 你也可以代代相传:例如, master~2表示master分支的祖父母,在含糊不清的情况下赞成第一个父母。 这些说明符可以任意链接, 例如 topic~3^2

有关完整的详细信息,请参阅git rev-parse --help的“指定修订”部分。

这意味着“父母的”。 所以HEAD^表示“当前HEAD的父母”。 你甚至可以将它们链接在一起: HEAD^^表示“当前HEAD的父亲”(即当前HEAD的祖父母), HEAD^^^表示“当前父亲的父亲HEAD“等等。

插入符号是指特定提交的父项。 例如HEAD^是指当前HEAD commmit的父节点。 (另外, HEAD^^是指祖父母)。

指定范围时也可以使用^ (插入符号)。

要排除提交可达的提交,使用前缀^符号 。 例如^ r1 r2表示提交从r2可达,但不包括从r1可达的。

<转>

包含可从(即,的祖先)到达的提交。

^ <转>

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

(^)得到命令的父源,即HEAD ^将得到HEAD的父亲。

这是一个视觉解释。 假设你有这样的历史:

  master A <- B <- C <- D / E <- F feature 

当function合并到主, C是由两个祖先创build的。 Git分配这些祖先的数字。 主线祖先B被分配1,并且特征祖先F被分配2。

因此C^1是指BC^2是指F C^C^1的别名。

你只会使用<rev>^3 。 如果你已经执行了三个分支的合并。

克拉代表一个提交抵消(父母)。 因此,举例来说, HEAD^表示“HEAD”, HEAD^^^表示“HEAD三次提交”。

格雷格培根给了一个很好的链接,但它非常密集。 在线Git介绍文档还介绍了修订和范围说明符:

https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection