HEAD〜vs HEAD ^ vs HEAD @ {}也称为tilde vs caret vs at sign


Answers:


97

这里的文档。

  • HEAD~2 :2提交早于HEAD
  • HEAD^2 :HEAD的第二个父级(如果HEAD是合并对象),否则是非法的
  • HEAD@{2} :指的是第3个清单 git reflog
  • HEAD~~ :2提交早于HEAD
  • HEAD^^ :2提交早于HEAD

如果HEAD是合并,则

  • 第一父级是我们合并到的分支,
  • 第二个父级是我们合并的分支。

一些组合和同义词

First Parent    First Grandparent    Second Parent    Second Grandparent

HEAD~
HEAD^
HEAD~1          HEAD~2               HEAD^2           HEAD^2~        
HEAD^1          HEAD^^                                HEAD^2^ 

文档链接是完美的。Git Book v2对v1有许多有用的补充。
Shaun Luttin

4
HEAD~0HEAD与您期望的相同。有点令人困惑,HEAD^0它也与相同HEAD
弗拉基米尔·雷谢尼科夫

3
要记住哪个符号,我发现将^两个分支(在左下和右下)合并为一个(在上)
看起来很有帮助

22

git参考后缀(^ N,〜N,@ {...})

ref~是的简写ref~1,表示提交的第一父级。ref~2表示提交的第一父级的第一父级。ref~3表示提交的第一位父母的第一位父母的第一位父母。等等。

ref^是的简写ref^1,表示提交的第一父级。但是两者的不同之处在于,这ref^2意味着提交的第二个父级(请记住,提交在合并时可以有两个父级)。

^和〜运算符可以组合。

这是一个显示如何以HEAD为起点引用各种提交的图。
在此处输入图片说明

src


3

我数每个~^表示“返回上一级”。如果在~(例如~n)旁边有一个数字,则n用作乘法器。如果在^(例如^n)旁边有一个数字,则n是要使用的第n个父对象(或从中的从左到右列位置的横向移动git log --graph)。

例:

$ git log --oneline --graph 
*   29392c8 (HEAD -> master, tag: A) A
|\
| * a1ef6fd (tag: C) C
| |
|  \
*-. \   8ae20e9 (tag: B) B
|\ \ \
| | |/
| | *   03160db (tag: F) F
| | |\
| | | * 9df28cb (tag: J) J
| | * 2afd329 (tag: I) I
| * a77cb1f (tag: E) E
*   cd75703 (tag: D) D
|\
| * 3043d25 (tag: H) H
* 4ab0473 (tag: G) G

以上标记的坐标:

A =      = A^0
B = A^   = A^1     = A~1
C = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2

git log --online --graph输出使得它很难看到其提交都在同一水平线上,所以这里是另一个演示文稿(其中“A”是最新的提交及以上的提交是在顶部):

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A

(插图摘自Git中的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.