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'将生成一行包含此提交的所有子元素,不管是否涉及分支。
其他回答
我在~/.gitconfig中有这个别名
first-child = "!f() { git log --reverse --ancestry-path --pretty=%H $1..${2:-HEAD} | head -1; }; f"
Tomas Lycken在使用Git提交来驱动实时编码会话中给出了一种简洁的方法,即在提交堆栈的末尾创建定义良好的标记。本质上
git config --global alias.next '!git checkout `git rev-list HEAD..demo-end | tail -1`'
“demo-end”是最后一个标签。
现有的答案假设您有一个包含您正在寻找的提交的分支。
在我的例子中,我正在寻找的提交不在git rev-list中——因为没有分支包含它。
我最终通过gitk -reflog手动查看。
如果你在reflog中也找不到你的commit,试试:
Git FSCK—完整的列表悬垂(即不在任何分支)提交,或 Git FSCK -lost-found使引用指向悬垂提交,以应用其他答案中的技术。
我明白你的意思。让人沮丧的是,有足够多的语法可以转到以前的提交,但没有一个语法可以转到下一个提交。在复杂的历史中,“下一次提交是什么”的问题变得相当困难,但在复杂的合并中,“前一次”提交也会出现同样的困难。在简单的情况下,在具有线性历史记录的单个分支中(即使只是局部地针对一些有限数量的提交),向前和向后移动将是很好的和有意义的。
然而,这样做的真正问题是,子提交没有被引用;它只是一个反向链表。找到子提交需要进行搜索,这并不太糟糕,但Git可能不想把它放入refspec逻辑中。
无论如何,我遇到了这个问题,因为我只是想在历史上一步一步地向前迈进,做测试,有时你必须向前迈进,而不是后退。嗯,经过深思熟虑,我想出了这个解决方案:
在你所处的位置之前选择一个承诺。这可能是一个分支。如果你在分支~10,“git checkout分支~9”,“git checkout分支~8”得到下一个之后,“git checkout分支~7”等等。
如果需要的话,在脚本中递减这个数字应该非常容易。比解析Git版本列表简单得多。
如果子提交都在某个分支上,你可以使用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'将生成一行包含此提交的所有子元素,不管是否涉及分支。