【问题标题】:What does HEAD~n^k does on git? [duplicate]HEAD~n^k 在 git 上做了什么? [复制]
【发布时间】:2020-12-06 02:51:46
【问题描述】:

我注意到可以通过使用^~ 字符来指定实际提交的祖先。例如,如果我有以下提交日志

* 1990f31 Somme third commit message 
* k135145 Somme second commit message 
* 2c13521 Somme first commit message 

然后我可以知道1990f31HEAD^1(或等效于HEAD~1)的父提交是k135145

现在,我还 read 可以在合并提交时组合 ^~ 。因此,有人可以提供一个示例来说明在键入 git show HEAD~n^k 时提交引用,或者通过转换此运算符,如 git show HEAD^k~n?,我正在考虑将 nk 作为表示正整数的抽象。

【问题讨论】:

标签: git version-control git-show


【解决方案1】:

HEAD 始终在您所在的位置。 HEAD~n 表示第 n 次修订(始终采用第一个父级)。 HEAD~n^k 表示,从HEAD 返回的第 n 个修订版,采用第 k 个父级(HEAD~n 是具有至少 k 个父级的合并修订版)。

【讨论】:

    【解决方案2】:

    ~^ 是运算符,您可以使用它们来指定提交历史中的任何祖先。

    让我们从图表开始:

    * aa (HEAD, master) commit
    * bb merged branch `some/feature` into master
    |\
    | * cc (some/feature) feature: completed
    | * dd feature: wip
    | * ff feature: start
    * | gg some fix on master
    |/
    * hh some commit on master
    
    • ~ 将上升到first父母的链条:

      • aa~bbaa~2ggaa~3hh
      • cc~ddcc~2ffcc~3 也是 hh
      • 但是单独使用~,从aa开始,你将无法探索some/feature分支:在合并点(bb),cc第二个 bb 的父级
      • 注意~n~~...~ 的快捷方式,重复n 次,例如:aa~3aa~~~ 相同
    • ^ 只会上升一级,但允许您检查 n-th 父级以查找具有多个父级的提交

      • 调用xx^xx~ 相同:在这两种情况下,它都是xx 的第一个父级
      • aa 是一个常规提交,只有一个单亲:所以aa^bb(与aa~ 相同),aa^2 不存在
      • bb 是一个合并提交,有 2 个父级:bb^gg(与 bb~ 相同),bb^2ccbb^3 不存在
      • 请注意,^n不是^^...^ 的快捷方式,例如:
        bb^2bb 的第二个父级(它是cc
        bb^^bb 的第一个父级的第一个父级(它是hh

    在某些情况下,您可以进行 octopus 合并提交,其中可能有 xx^3xx^4 ... 父母。


    通过组合运算符,您可以“导航”到任何祖先提交。

    例如,从aa 开始,到达ff 的一种方式是:

    aa~^2~2
    
    # some other ways to describe a path to reach `ff` :
    aa^^2~2   # to reach the first parent, ~ or ^ are equivalent
    aa~^2~~   # ~2 is the same as ~~
    aa^^2^^
    ...
    

    一般来说,您不能切换 ~^ 序列,因为它们不会指向同一个提交。
    例如:

    aa~^2   # points at cc
    aa^2~   # does not exist
    

    任何指向提交的东西都可以代替上面的aabbcc

    • HEADsha1some/branchsome/tag ...
    • git 已知的其他一些引用:stash@{0}(存储中的项目),HEAD@{3}HEAD 的引用日志中的元素),master@{2}master 分支的引用日志中的元素)
    • ...

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 2014-07-14
      • 2011-11-06
      • 2019-02-19
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      相关资源
      最近更新 更多