我在这里看到了一个 回答一个问题,它可以帮助恢复 Git 中已删除的文件。
解决办法是
git checkout <deleting_commit>^ -- <deleted_file_path>
插入字符(^)是做什么的?我在其他地方见过它用 Git 做非常有用的事情。太神奇了。有人能告诉我这是干什么用的吗?
^
插入符号指的是特定提交的父级。例如,HEAD^引用当前 HEAD 提交的父级。(同样,HEAD^^指的是祖父母)。
HEAD^
HEAD^^
意思是“父母”。所以 HEAD^的意思是“当前头部的父级”。你甚至可以把它们链接在一起: HEAD^^表示“当前 HEAD 的父元素的父元素”(即,当前 HEAD 的祖元素) ,HEAD^^^表示“当前 HEAD 的父元素的父元素的父元素”,等等。
HEAD^^^
克拉表示提交偏移量(父)。例如,HEAD^表示“从 HEAD 提交一次”,HEAD^^^表示“从 HEAD 提交三次”。
(^)获取命令的父源,即 HEAD ^ 将获取 HEAD 的父源。
HEAD^表示当前分支尖端的第一个父级。
记住 git 提交可以有多个父级。HEAD^是 HEAD^1的缩写,您也可以根据需要寻址 HEAD^2等等。
HEAD^1
HEAD^2
你可以得到父母的任何承诺,不只是 HEAD。您还可以通过代来回移动: 例如,master~2表示主分支顶端的祖父级,在模糊的情况下有利于第一个父级。这些说明符可以任意链接 在 Git 中,HEAD^和 HEAD~有什么区别?
HEAD
master~2
HEAD~
有关详细信息,请参阅 git rev-parse --help的 “指定修订”部分。
git rev-parse --help
Greg Bacon 给出了一个很好的链接,但是很难理解。Git 在线介绍文档还介绍了修订和范围说明:
Https://git-scm.com/book/en/v2/git-tools-revision-selection
当 指定范围时也可以使用 ^(插入符号)。
若要排除提交中可达到的提交,前缀 ^ 符号为 例如 ^ r1 r2意味着可以从 r2访问的提交,但不包括 R1可以联系到。 翻译: 奇芳 包括可以从(例如)。 ^ < rev > 排除可从。
若要排除提交中可达到的提交,前缀 ^ 符号为 例如 ^ r1 r2意味着可以从 r2访问的提交,但不包括 R1可以联系到。
翻译: 奇芳
包括可以从(例如)。
^ < rev >
排除可从。
这里有一个可视化的解释,假设你有这样的历史:
master ... <- B <- C <- D / ... <- E <- F feature
当功能合并到主机中时,C是由两个祖先合并而成的。Git 给这些祖先编号。主线祖先 B被分配为1,特征祖先 F被分配为2。
C
B
F
因此,C^1指 B,C^2指 F。 C^是 C^1的别名。
C^1
C^2
C^
如果你执行了三个分支的合并,你只会使用 <rev>^3。
<rev>^3
OP: 插入(^)字符在 Git 中是什么意思?
HEAD^(Caret)和 HEAD~(Tilde)之间的区别在于它们如何从指定的起点向后遍历历史,在本例中为 HEAD。
选择 <n>th代祖先,仅次于第一个 * 父母
<n>th
选择第一代祖先的 <n>th亲本
* 第一个父元素始终是合并的左边,例如被合并到的分支上的提交。
如下图所示,两个选择器 ~和 ^可以组合使用。还要注意,不要使用 HEAD作为起点,任何常规引用都可以使用,比如 分行 强 >、 标签甚至 提交散列。
此外,根据选择的祖先是什么,^和 ~可以互换使用,如下表所示。
来源: 在 这个的博客文章中可以找到关于这个主题的一个全面的概述。