27

我见过 git 命令使用诸如 之类的语法HEAD~,但我无法在 Git参考手册中找到这种语法。

这是我所理解的:<commit>~<n>指的是提交<n>步骤早于<commit>(其中<n>是一个整数),并且commit~简单地表示相同并且<n>隐式为一。

现在,这是正确的吗?在那种情况下,这总是有效吗?如果<commit>是两个分支之间合并的结果,那么提交将<commit>~引用哪个呢?是否有一些相应的语法来引用下一个提交或稍后的提交<n>步骤?

4

4 回答 4

26

在 Pro Git 中的 Acenstry References一章中,您对它的工作原理有一个非常清楚的解释:

  • ~用于获取第一个父级。
  • ^可用于获取其他父母(^2例如,用于合并)。

但是你没有一个简单的方法来引用下一个提交,即使有更复杂的方法来获取它。

于 2013-04-17T14:31:09.730 回答
18

简单地回答标题中的问题(因为这就是让我从谷歌来到这里的原因):

要签出上一个提交:

git checkout HEAD^

签出下一个提交(假设没有分支):

git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \  -f 2`
于 2014-05-22T01:46:50.007 回答
8

受@cexbrayat 回答的启发,我发现这样想很有用:

如何引用提交的祖先中的某些内容,其中提交可以有多个父项:

  • ^n指定哪个父级

  • ~n指定哪一代

两者都默认为一个。

于 2015-10-29T20:09:59.843 回答
3

要引用分支上的最新提交,您还可以使用@~1

git checkout @~1
于 2021-01-19T20:10:29.763 回答