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


124

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

解决方案是

git checkout <deleting_commit>^ -- <deleted_file_path>

脱字号(^)有什么作用?我已经在其他地方看到它在git中做非常有用的事情。太神奇了。有人请为我宠坏它,然后告诉我它做什么?


8
仅供参考,在Windows上:^在DOS shell中无法按预期工作。使用git bash shell,然后运行。
辛辛那提·乔

5
当我尝试使用它(猜测其含义)时,我什至没有想到。脱字号(^)是cmd.exe中的转义字符。每次尝试使用它来查看是否有帮助时,我实际上什么都没传递,这解释了为什么结果始终不变的原因。> _>愚蠢的cmd.exe。您可以通过将其加倍或引用来对其进行转义: git log master^^git log "master^"
bambams

Answers:


138

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

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

您可以进行任何承诺的父母,而不仅仅是HEAD。您还可以世代相传:例如,master~2表示master分支的顶端的祖父母,在模棱两可的情况下优先使用第一个父级。这些说明符可以被任意连接,例如topic~3^2。查看与Git 之间有什么区别的相关答案HEAD^HEAD~

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


1
但是,在线性历史记录中,为什么不HEAD^^^返回第三个较旧的提交,即等于HEAD~~~
Vorac 2014年

1
@Vorac对于线性历史,是的。
格雷格·培根

21

它的意思是“的父母”。因此HEAD^表示“当前HEAD的父代”。您甚至可以将它们链接在一起:HEAD^^表示“当前HEAD的父代的父母”(即当前HEAD的祖父母),HEAD^^^表示“ 当前HEAD 的父代的父母的父母”,依此类推。


16

^时(脱字符号)也可以使用指定范围

为了从提交中排除可到达的提交,使用前缀^表示法。例如^ r1 r2表示可从r2到达的提交,但不包括可从r1到达的提交。

<rev>

包括可从(即其祖先)到达的提交。

^ <版本>

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


10

这是一个直观的解释。假设您有这样的历史记录:

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

当功能合并到母版中时,C由两个祖先创建。Git分配这些祖先编号。主线祖先B被分配为1,特征祖先F被分配为2。

因此C^1BC^2FC^是的别名C^1

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


7

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


4

克拉表示提交偏移量(父)。因此,例如,HEAD^表示“来自HEAD的一个提交”和HEAD^^^表示“来自HEAD的三个提交”。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.