HEAD~n^k 在 git 上做什么?
What does HEAD~n^k does on git?
我注意到可以使用 ^
或 ~
字符指定实际提交的祖先。例如,如果我有以下提交日志
* 1990f31 Somme third commit message
* k135145 Somme second commit message
* 2c13521 Somme first commit message
然后我可以知道哪个是 1990f31
与 HEAD^1
(或等同于 HEAD~1
)的父提交,即 k135145
.
现在,我还 read 合并提交时可以合并 ^
或 ~
。因此,有人可以提供一个示例来说明在键入 git show HEAD~n^k
时的提交引用,或者通过像 git show HEAD^k~n
这样的运算符来交换吗?我正在考虑将 n
和 k
作为抽象表示一个正整数。
HEAD
永远在你身边。 HEAD~n
表示返回的第 n 个修订版(始终采用第一个父级)。 HEAD~n^k
表示,从 HEAD
返回的第 n 个修订版,取第 k 个父级(HEAD~n
是至少有 k 个父级的合并修订版)。
~
和 ^
是运算符,您可以使用它们来指定提交历史记录中的任何祖先。
让我们从图表开始:
* 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 parents :
链中上升
aa~
是bb
,aa~2
是gg
,aa~3
是hh
cc~
是dd
,cc~2
是ff
,cc~3
也是hh
- 但单独使用
~
,并且从 aa
开始,您将无法探索 some/feature
分支:在合并点 (bb
), cc
是bb
的第二个parent
- 注意
~n
是~~...~
重复n次的快捷方式,例如:aa~3
等同于aa~~~
^
只会上升一级,但允许您检查 n-th
parent 是否有多个 parents
- 调用
xx^
与 xx~
相同:在这两种情况下,它都是 xx
的第一个 parent
aa
是一个常规提交,只有一个 parent:所以 aa^
是 bb
(与 aa~
相同),aa^2
不存在
bb
是合并提交,有 2 个 parents:bb^
是 gg
(与 bb~
相同),bb^2
是cc
,bb^3
不存在
- 请注意
^n
不是 ^^...^
的快捷方式,例如:
bb^2
是 bb
的第二个 parent(即 cc
)
bb^^
是bb
的第一个parent的第一个parent(就是hh
)
在某些情况下,您可以进行章鱼合并提交,其中可能有 xx^3
、xx^4
... parents.
通过组合运算符,您可以“导航”到任何祖先提交。
例如,从 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
任何指向提交的内容都可以代替上面的 aa
、bb
或 cc
:
HEAD
,一个sha1
,some/branch
,some/tag
...
- git 已知的一些其他引用:
stash@{0}
(藏品中的项目),HEAD@{3}
(HEAD
的 reflog 中的元素),master@{2}
(master
分支的 reflog 中的元素)
- ...
我注意到可以使用 ^
或 ~
字符指定实际提交的祖先。例如,如果我有以下提交日志
* 1990f31 Somme third commit message
* k135145 Somme second commit message
* 2c13521 Somme first commit message
然后我可以知道哪个是 1990f31
与 HEAD^1
(或等同于 HEAD~1
)的父提交,即 k135145
.
现在,我还 read 合并提交时可以合并 ^
或 ~
。因此,有人可以提供一个示例来说明在键入 git show HEAD~n^k
时的提交引用,或者通过像 git show HEAD^k~n
这样的运算符来交换吗?我正在考虑将 n
和 k
作为抽象表示一个正整数。
HEAD
永远在你身边。 HEAD~n
表示返回的第 n 个修订版(始终采用第一个父级)。 HEAD~n^k
表示,从 HEAD
返回的第 n 个修订版,取第 k 个父级(HEAD~n
是至少有 k 个父级的合并修订版)。
~
和 ^
是运算符,您可以使用它们来指定提交历史记录中的任何祖先。
让我们从图表开始:
* 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 parents :aa~
是bb
,aa~2
是gg
,aa~3
是hh
cc~
是dd
,cc~2
是ff
,cc~3
也是hh
- 但单独使用
~
,并且从aa
开始,您将无法探索some/feature
分支:在合并点 (bb
),cc
是bb
的第二个parent
- 注意
~n
是~~...~
重复n次的快捷方式,例如:aa~3
等同于aa~~~
^
只会上升一级,但允许您检查n-th
parent 是否有多个 parents- 调用
xx^
与xx~
相同:在这两种情况下,它都是xx
的第一个 parent
aa
是一个常规提交,只有一个 parent:所以aa^
是bb
(与aa~
相同),aa^2
不存在bb
是合并提交,有 2 个 parents:bb^
是gg
(与bb~
相同),bb^2
是cc
,bb^3
不存在- 请注意
^n
不是^^...^
的快捷方式,例如:
bb^2
是bb
的第二个 parent(即cc
)
bb^^
是bb
的第一个parent的第一个parent(就是hh
)
- 调用
在某些情况下,您可以进行章鱼合并提交,其中可能有 xx^3
、xx^4
... parents.
通过组合运算符,您可以“导航”到任何祖先提交。
例如,从 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
任何指向提交的内容都可以代替上面的 aa
、bb
或 cc
:
HEAD
,一个sha1
,some/branch
,some/tag
...- git 已知的一些其他引用:
stash@{0}
(藏品中的项目),HEAD@{3}
(HEAD
的 reflog 中的元素),master@{2}
(master
分支的 reflog 中的元素) - ...