我在这里看到answer to a question有助于在git中恢复已删除的文件。
解决方案是
git checkout <deleting_commit>^ -- <deleted_file_path>
插入符号(^
)有什么作用?我在其他地方看到它在git中做了非常有用的事情。这很神奇。请有人为我破坏它并告诉我它的作用?
答案 0 :(得分:117)
HEAD^
表示当前分支的提示的第一个父级。
请记住,git提交可以有多个父级。 HEAD^
是HEAD^1
的缩写,您也可以根据需要解决HEAD^2
等问题。
你可以找到任何提交的父母,而不仅仅是HEAD
。您也可以追溯到几代人:例如,master~2
表示主分支尖端的祖父母,在歧义的情况下偏向第一个父母。这些说明符可以任意链接
,例如,topic~3^2
。请参阅What’s the difference between HEAD^
and HEAD~
in Git?
有关完整详细信息,请参阅git rev-parse --help
的{{3}}部分。
答案 1 :(得分:20)
这意味着“父母”。所以HEAD^
表示“当前HEAD的父级”。您甚至可以将它们链接在一起:HEAD^^
表示“当前HEAD的父级的父级”(即当前HEAD的祖父级),HEAD^^^
表示“父级父级的父级”目前的HEAD“,等等。
答案 2 :(得分:12)
specifying ranges时也可以使用^
(插入符号)。
要排除提交中可到达的提交,前缀^表示法是 用过的。例如。 ^ r1 r2表示可以从r2到达的提交但不包括那些提交 可从r1到达。
<强>&LT; REV&GT; 强>
包含可从(即祖先)访问的提交。
<强> ^&LT; REV&GT; 强>
排除可以从(即祖先)到达的提交。
答案 3 :(得分:7)
插入符指的是特定提交的父级。例如。 HEAD^
指的是当前HEAD提交的父级。 (另外,HEAD^^
指的是祖父母)。
答案 4 :(得分:6)
这是一个直观的解释。假设你有这样的历史:
master
A <- B <- C <- D
/
E <- F
feature
当功能合并到主服务器时,C
创建了两个祖先。 Git分配这些祖先数字。主线祖先B
分配为1,功能祖先F
分配为2.
因此C^1
引用B
而C^2
引用F
。 C^
是C^1
的别名。
您只能使用<rev>^3
。如果你已经完成了三个分支的合并。
答案 5 :(得分:4)
(^)获取命令的父源,即HEAD ^将获得HEAD的父级。
答案 6 :(得分:3)
克拉表示提交偏移量(父级)。例如,HEAD^
表示“一个来自HEAD的提交”,HEAD^^^
表示“三个来自HEAD的提交”。
答案 7 :(得分:1)