有没有办法引用当前分离的HEAD的子提交?

时间:2016-08-27 15:12:36

标签: git version-control parent-child git-checkout git-revision

我知道如何将父提交称为HEAD^

但是可以以类似的方式引用子提交吗?

3 个答案:

答案 0 :(得分:1)

git log --reverse --children -n1 HEAD应该有用。

git log --reverse --children -n1 HEAD --pretty=format:"%H" --no-patch如果您只想查看提交的哈希值。

类似问题已被问及herehere

答案 1 :(得分:1)

列出所有已分离HEAD的子项

使用此别名:

# Get all children of current or specified commit-ish
children = "!bash -c 'c=${1:-HEAD}; set -- $(git rev-list --all --not \"$c\"^@ --children | grep $(git rev-parse \"$c\") ); shift; echo $*' -"

git children然后会列出所有分离的HEAD的子项。

列出特定儿童

如果您只想要特定分支的祖先中的孩子:

根据this question的答案,我在.gitconfig中删除了这个别名。

# Get the child commit of the current commit.
# Use $1 instead of 'HEAD' if given. Use $2 instead of curent branch if given.
child = "!bash -c 'git log --format=%H --reverse --ancestry-path ${1:-HEAD}..${2:\"$(git rev-parse --abbrev-ref HEAD)\"} | head -1' -"

在您的情况下,您将其用作:git child HEAD <tip> ,其中tip是commit-ish,通常是包含分离头的分支名称。

例如:git child HEAD branchname

它默认为给孩子HEAD(除非给出另一个commit-ish参数),方法是将祖先跟随当前分支的一步(除非给出另一个commit-ish作为第二个参数)。但请注意,对于分离的头部,“当前分支”未定义。

如果您需要短哈希表单,请使用%h代替%H

答案 2 :(得分:1)

Git通过查看记录的亲子关系,即时获取子信息。基线提交查找器为git rev-list,它可以跟踪有趣提交的祖先路径,因此:

git rev-list --ancestry-path --all --reflog --parents ^HEAD | grep `git rev-parse HEAD`

或者

git rev-list --boundary --ancestry-path --all --reflog --children ^HEAD \
| grep ^-$(git rev-parse HEAD)