我看到了一个关于如何在git中恢复已删除文件的解答。
解决方案如下:
git checkout <deleting_commit>^ -- <deleted_file_path>
插入符号 (^
) 是什么作用?我在 git 中看到它做了很多有用的事情,它很神奇。请告诉我它是什么并且它是如何工作的。
我看到了一个关于如何在git中恢复已删除文件的解答。
解决方案如下:
git checkout <deleting_commit>^ -- <deleted_file_path>
插入符号 (^
) 是什么作用?我在 git 中看到它做了很多有用的事情,它很神奇。请告诉我它是什么并且它是如何工作的。
HEAD^
表示当前分支末尾的第一个父提交。
请记住,git提交可以有多个父提交。HEAD^
等同于 HEAD^1
,您还可以根据需要使用 HEAD^2
等地址其他父提交。
您可以获取任何提交的父提交,不仅限于 HEAD
。您也可以向后移动多个代数:例如,master~2
表示主分支末尾的祖父提交,在歧义情况下偏向于第一个父提交。这些指定符可以任意链接,比如 topic~3^2
。请参见Git 中 HEAD^
和 HEAD~
的区别是什么?相关的答案。
了解更多详情,请查看 git rev-parse --help
中的“指定修订版本”部分。
HEAD^^^
返回第三个更旧的提交,即它等同于HEAD~~~
? - Vorac它的意思是“父级的”。因此,HEAD^
的意思是“当前HEAD的父级”。你甚至可以将它们链接在一起: HEAD^^
的意思是“当前HEAD的父级的父级”(即当前HEAD的祖父级),HEAD^^^
的意思是“当前HEAD的父级的父级的父级”,以此类推。
HEAD
后面跟着一个合并提交,则HEAD^
表示HEAD
的第一个父级,而HEAD^^
(或HEAD^2
)表示HEAD
的第二个父级。在合并提交中,HEAD
的第二个父级并不等同于HEAD
的父级的父级。请参阅Git手册中的祖先引用。 - bhagertyHEAD^2
确实表示HEAD
的第二个父级,但HEAD^2
和HEAD^^
并不是同义词。多个插入符号确实与第一个父提交有关,因此就像HEAD^^
通常指HEAD
的祖父一样,当HEAD
是合并提交时,HEAD^^
是HEAD
第一个提交的父代的祖父;同样,HEAD^2^
是第二个父级的父级。 - mipadiHEAD~~
和HEAD~2
是同义词,因此类比地,我期望数字运算符与插入符号的工作方式类似。从你的话来看,它并不是这样的。这很不幸。 - bhagerty^
(脱字符)也可以在指定范围时使用。
为了排除从一个提交可达的提交,使用前缀^符号。例如,^r1 r2 表示从 r2 可达的提交,但不包括从 r1 可达的提交。
<rev>
包含可由(即祖先)<rev> 到达的提交。
^<rev>
排除可由(即祖先)<rev> 到达的提交。
这里有一个视觉解释。假设您的历史记录如下:
master
... <- B <- C <- D
/
... <- E <- F
feature
当功能并入主分支时,将创建带有两个祖先的C。 Git为这些祖先分配编号。主线祖先B被分配1,功能祖先F被分配2。符号^指向一个特定提交的父级。例如,HEAD^
指向当前HEAD提交的父级。(同样,HEAD^^
指向祖父级)。
克拉表示提交偏移量(父级)。例如,HEAD^
表示“距离 HEAD 一次提交”,HEAD^^^
表示“距离 HEAD 三次提交”。
(^)获取命令的父源,例如HEAD^将获取HEAD的父源。
OP: Git中的字符caret (^)是什么意思?
HEAD^
(Caret)和HEAD~
(Tilde)之间的区别在于它们如何从指定的起始点,即HEAD
向后遍历历史记录。
<rev>~[<n>]
= 选择第<n>
代祖先,只跟踪第一个*父节点
<rev>^[<n>]
= 选择第一代祖先的<n>
个父节点
*第一个父节点始终是合并的左侧,例如合并到分支上的提交。
如下图所示,两个选择器~和^可以组合使用。还要注意的是,除了使用HEAD
作为起始点外,任何常规引用都可以使用,例如分支、标签甚至是提交哈希。
此外,根据所需选择的祖先,^和~可以互换使用,如下表所示。
来源:有关此主题的详细信息,请参见此博客文章。
^
)是cmd.exe中的转义字符。每次我尝试使用它来查看它是否有帮助时,实际上都没有传递任何内容,这就解释了为什么结果从未不同。> _>愚蠢的cmd.exe。您可以通过将其加倍或引用来进行转义:git log master^^
或git log "master^"
- bambams