【问题标题】:Referring to the previous/next commit in git?参考 git 中的上一个/下一个提交?
【发布时间】:2013-04-10 08:27:14
【问题描述】:

我看到 git 命令使用 HEAD~ 之类的语法,但我在 Git Reference Manual 中找不到这种语法。

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

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

【问题讨论】:

    标签: git commit


    【解决方案1】:

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

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

    但是你没有简单的方法来引用下一次提交,即使there are more convoluted ways 得到它。

    【讨论】:

    • 谢谢。参考手册显然不是合适的地方——我认为它也会涵盖 Git 的语法。
    【解决方案2】:

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

    检查上一次提交:

    git checkout HEAD^
    

    检查下一次提交(假设没有分支):

    git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \  -f 2`
    

    【讨论】:

      【解决方案3】:

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

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

      • ^n 指定哪个父节点

      • ~n 指定哪一代

      两者都默认为一个。

      【讨论】:

      • 这是一个非常好的规则 :) 虽然当既没有指定 ^n 也没有指定 ~n 时它会崩溃。
      • 只剩下提交哈希本身,它指的是..本身。我想我应该指定提交哈希也应该包括在内。是这个意思吗?
      • 我猜你的意思是它们默认为一个,就像编程中函数的参数可以有默认值,如果你不指定它们?我在想,如果你有一个函数,它同时接受哪一代和哪一个父级并返回一个提交引用,如果你没有指定它们中的任何一个,你就会得到你开始的提交。因此,在这种情况下,即使您没有指定哪一代,一代也会是 0。虽然我意识到哪一个父母真的只有在1代的时候才相关,所以两者有这样的功能并没有太大意义。
      • 也就是说,如果不指定哪个父代,则生成的默认值为0。
      • 好吧,我所说的“默认为一个”的意思是:考虑表达式“^”。没有为您所指的父级提供特定值,因此返回第一个父级。与“~”相同。没有指定数字,所以第一代是它所作用的。
      【解决方案4】:

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

      git checkout @~1
      

      【讨论】:

      • 不确定是否到处都是这种情况,但在 Windows 上的 PowerShell 中是 git checkout "@~1"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2020-02-25
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多