HEAD~vs HEAD ^ vs HEAD @ {}也称为波浪号vs符号vs符号

Sha*_*tin 51 git

HEAD是当前分支的指针.我已经看到了HEAD祖先的各种符号,包括

  • HEAD~2
  • HEAD^2
  • HEAD@{2}
  • HEAD~~
  • HEAD^^

上述每一个意味着什么?这方面的文件在哪里?

Tim*_*Tim 70

来自这里的文档.

  • 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^ 
Run Code Online (Sandbox Code Playgroud)

  • 正如您所期望的,`HEAD〜0`与`HEAD`相同。令人困惑的是,“ HEAD ^ 0”也与“ HEAD”相同。 (2认同)
  • 为了记住哪个符号,我觉得`^`看起来像两个分支(在左下和右下)**合并**成一个(在上)很有帮助。 (2认同)

Pre*_*raj 18

git引用后缀(^ N,~N,@ {...})

ref~是简历ref~1,表示提交的第一个父级.ref~2表示提交的第一个父亲的第一个父亲.ref~3表示提交的第一个父级的第一个父级的第一个父级.等等.

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

可以组合^和〜运算符.

这是一个图表,显示了如何使用HEAD作为起点引用各种提交.
在此输入图像描述

SRC


mva*_*nle 6

我计算每个~^意思是“回到一个级别”。如果~(例如~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
Run Code Online (Sandbox Code Playgroud)

以上标签的坐标:

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
Run Code Online (Sandbox Code Playgroud)

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

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
Run Code Online (Sandbox Code Playgroud)

(插图摘自Git 中 HEAD^ 和 HEAD~ 的区别是什么?)。