ref^指的是在ref之前的提交,那么在ref之后的提交呢?
例如,如果我签出12345,我如何签出下一次提交?
是的,Git是一个DAG节点指针结构树。我如何找到这个之后的提交?
ref^指的是在ref之前的提交,那么在ref之后的提交呢?
例如,如果我签出12345,我如何签出下一次提交?
是的,Git是一个DAG节点指针结构树。我如何找到这个之后的提交?
当前回答
如果你心中没有特定的“目的地”提交,而是想查看可能在任何分支上的子提交,你可以使用这个命令:
git rev-list --children --all | grep ^${COMMIT}
如果你想看到所有的子结点和孙子结点,你必须递归地使用rev-list——children,如下所示:
git rev-list --children --all | \
egrep ^\($(git rev-list --children --all | \
grep ^${COMMIT} | \
sed 's/ /|/g')\)
(只提供孙辈的版本将使用更复杂的sed和/或cut。)
最后,你可以输入一个log——graph命令来查看树结构,如下所示:
git log --graph --oneline --decorate \
\^${COMMIT}^@ \
$(git rev-list --children --all | \
egrep ^\($(git rev-list --children --all | \
grep ^${COMMIT} | \
sed 's/ /|/g')\))
注意:上面的命令都假设你已经将shell变量${COMMIT}设置为你感兴趣的子提交的某个引用(分支,标签,sha1)。
其他回答
每次提交都存储一个指向其父(在merge(标准)提交的情况下为父)的指针。
因此,没有任何方法可以从父对象指向子提交(如果有的话)。
Tomas Lycken在使用Git提交来驱动实时编码会话中给出了一种简洁的方法,即在提交堆栈的末尾创建定义良好的标记。本质上
git config --global alias.next '!git checkout `git rev-list HEAD..demo-end | tail -1`'
“demo-end”是最后一个标签。
我需要一个命令来快速签出下一次提交。 我最终得到了这个别名:
[alias]
next = "!f() { CMIT=$(git log --ancestry-path --format=%H ${commit}..${1} | tail -1) && git checkout $CMIT; }; f"
你需要指定你想要遍历的分支,例如:
git next master
您可以通过直接编辑它来将其添加到.gitconfig文件中。
输出示例:
~/home/myRepo | dd9e66ee git next master
Previous HEAD position was dd9e66e Update README
HEAD is now at d71c74b Rename project; update to JUnit5
通过运行这个命令,你进入分离的头部模式,当然:)
如果你心中没有特定的“目的地”提交,而是想查看可能在任何分支上的子提交,你可以使用这个命令:
git rev-list --children --all | grep ^${COMMIT}
如果你想看到所有的子结点和孙子结点,你必须递归地使用rev-list——children,如下所示:
git rev-list --children --all | \
egrep ^\($(git rev-list --children --all | \
grep ^${COMMIT} | \
sed 's/ /|/g')\)
(只提供孙辈的版本将使用更复杂的sed和/或cut。)
最后,你可以输入一个log——graph命令来查看树结构,如下所示:
git log --graph --oneline --decorate \
\^${COMMIT}^@ \
$(git rev-list --children --all | \
egrep ^\($(git rev-list --children --all | \
grep ^${COMMIT} | \
sed 's/ /|/g')\))
注意:上面的命令都假设你已经将shell变量${COMMIT}设置为你感兴趣的子提交的某个引用(分支,标签,sha1)。
我用下面的方法找到了下一个孩子:
git log --reverse --children -n1 HEAD (where 'n' is the number of children to show)