ref^指的是在ref之前的提交,那么在ref之后的提交呢?
例如,如果我签出12345,我如何签出下一次提交?
是的,Git是一个DAG节点指针结构树。我如何找到这个之后的提交?
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