插入符号(^)在 Git 中是什么意思?

我在这里看到了一个 回答一个问题,它可以帮助恢复 Git 中已删除的文件。

解决办法是

git checkout <deleting_commit>^ -- <deleted_file_path>

插入字符(^)是做什么的?我在其他地方见过它用 Git 做非常有用的事情。太神奇了。有人能告诉我这是干什么用的吗?

50447 次浏览

插入符号指的是特定提交的父级。例如,HEAD^引用当前 HEAD 提交的父级。(同样,HEAD^^指的是祖父母)。

意思是“父母”。所以 HEAD^的意思是“当前头部的父级”。你甚至可以把它们链接在一起: HEAD^^表示“当前 HEAD 的父元素的父元素”(即,当前 HEAD 的祖元素) ,HEAD^^^表示“当前 HEAD 的父元素的父元素的父元素”,等等。

克拉表示提交偏移量(父)。例如,HEAD^表示“从 HEAD 提交一次”,HEAD^^^表示“从 HEAD 提交三次”。

(^)获取命令的父源,即 HEAD ^ 将获取 HEAD 的父源。

HEAD^表示当前分支尖端的第一个父级。

记住 git 提交可以有多个父级。HEAD^HEAD^1的缩写,您也可以根据需要寻址 HEAD^2等等。

你可以得到父母的任何承诺,不只是 HEAD。您还可以通过代来回移动: 例如,master~2表示主分支顶端的祖父级,在模糊的情况下有利于第一个父级。这些说明符可以任意链接 在 Git 中,HEAD^HEAD~有什么区别?

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

Greg Bacon 给出了一个很好的链接,但是很难理解。Git 在线介绍文档还介绍了修订和范围说明:

Https://git-scm.com/book/en/v2/git-tools-revision-selection

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

若要排除提交中可达到的提交,前缀 ^ 符号为 例如 ^ r1 r2意味着可以从 r2访问的提交,但不包括 R1可以联系到。

翻译: 奇芳

包括可以从(例如)。

^ < rev >

排除可从。

这里有一个可视化的解释,假设你有这样的历史:

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

当功能合并到主机中时,C是由两个祖先合并而成的。Git 给这些祖先编号。主线祖先 B被分配为1,特征祖先 F被分配为2。

因此,C^1BC^2FC^C^1的别名。

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

OP: 插入(^)字符在 Git 中是什么意思?

^ (Caret)和 ~ (Tilde)选择器

HEAD^(Caret)和 HEAD~(Tilde)之间的区别在于它们如何从指定的起点向后遍历历史,在本例中为 HEAD

波涛 ~

选择 <n>th代祖先,仅次于第一个 * 父母

插图 ^

选择第一代祖先的 <n>th亲本

* 第一个父元素始终是合并的左边,例如被合并到的分支上的提交。

结合在一起

如下图所示,两个选择器 ~^可以组合使用。还要注意,不要使用 HEAD作为起点,任何常规引用都可以使用,比如 分行 标签甚至 提交散列

此外,根据选择的祖先是什么,^~可以互换使用,如下表所示。

Illustration of relative references in Git

来源: 这个的博客文章中可以找到关于这个主题的一个全面的概述。