ref^指的是在ref之前的提交,那么在ref之后的提交呢?

例如,如果我签出12345,我如何签出下一次提交?

是的,Git是一个DAG节点指针结构树。我如何找到这个之后的提交?


当前回答

如果子提交都在某个分支上,你可以使用gitk——all commit^.,其中“commit”是标识提交的内容。例如,如果提交的缩写SHA-1哈希值是c6661c5,那么键入gitk——all c6661c5^..

您可能需要将完整的SHA-1哈希值输入到gitk的“SHA1 ID:”单元格中。你需要完整的SHA-1哈希值,本例中可以通过git rev-parse c6661c5获得。

或者,git rev-list——all——children | grep '^c6661c5883bb53d400ce160a5897610ecedbdc9d'将生成一行包含此提交的所有子元素,不管是否涉及分支。

其他回答

现有的答案假设您有一个包含您正在寻找的提交的分支。

在我的例子中,我正在寻找的提交不在git rev-list中——因为没有分支包含它。

我最终通过gitk -reflog手动查看。

如果你在reflog中也找不到你的commit,试试:

Git FSCK—完整的列表悬垂(即不在任何分支)提交,或 Git FSCK -lost-found使引用指向悬垂提交,以应用其他答案中的技术。

如果子提交都在某个分支上,你可以使用gitk——all commit^.,其中“commit”是标识提交的内容。例如,如果提交的缩写SHA-1哈希值是c6661c5,那么键入gitk——all c6661c5^..

您可能需要将完整的SHA-1哈希值输入到gitk的“SHA1 ID:”单元格中。你需要完整的SHA-1哈希值,本例中可以通过git rev-parse c6661c5获得。

或者,git rev-list——all——children | grep '^c6661c5883bb53d400ce160a5897610ecedbdc9d'将生成一行包含此提交的所有子元素,不管是否涉及分支。

git rev-list --ancestry-path commit1..commit2

我将commit1设置为当前提交,将commit2设置为当前头部,这将返回在commit1和commit2之间构建路径的所有提交的列表。

输出的最后一行是commit1的子元素(在通往commit2的路径上)。

这显示了当前HEAD的所有子元素的列表。

git rev-list --parents --all | awk -v h="$(git rev-parse HEAD)" 'index($0,h)>1{print$1}'

它只打印所有以HEAD为父文件的提交。

你可以稍微加快一下速度,把^HEAD放在|之前,那么HEAD的祖先就不会被搜索。

如果你想打印另一个提交或分支的子文件,只需把它放在HEAD的位置(在更快的版本中,在两个HEAD位置)。

要列出所有的提交,从当前提交开始,然后是它的子提交,等等-基本上是标准的git日志,但在时间上相反,使用类似于

git log --reverse --ancestry-path 894e8b4e93d8f3^..master

其中894e8b4e93d8f3是您想要显示的第一个提交。

注意:当使用DOS命令提示符时,必须转义插入符号:

git log --reverse --ancestry-path 894e8b4e93d8f3^^..master