gpt4 book ai didi

git - 是否有任何特定语法来引用前向提交(不使用它的 SHA1)?

转载 作者:太空狗 更新时间:2023-10-29 14:14:08 25 4
gpt4 key购买 nike

我可以使用 ^~*number* 来引用向后的修订,比如 319411a^HEAD~3.

是否有任何特定的语法来引用前向提交(类似于上面的语法)?

询问是否可以简单地引用前向提交。我想问是否可以在不手动找出所需修订 SHA1 的情况下引用前向修订。

最佳答案

没有;但是,使用 git rev-list然后进一步的工作,将有可能找到指向给定提交的项目。您必须首先选择一些起点(可能是 --all ),然后排除目标 rev 及其父级:

git rev-list --all --not <em>rev</em>

这当然会产生一长串 revs,其中许多是无趣的,因此需要进一步过滤:您需要那些 rev 的父级是 rev 的列表。 .

这个 shell 脚本(没有错误检查等)只处理第一个 parent :

target=$(git rev-parse $1)
git rev-list --all --not $target |
while read rev; do
if [ $(git rev-parse --verify --quiet $rev^) = $target ]; then
echo $rev
fi
done

但是如何从那里开始想象它应该是非常明显的(参见 git rev-list 的文档)。使用:

git rev-list -1 --parents $rev

将单个 rev 转换为“rev 及其父项”的列表,以进行 merge ,例如:

set -- $(git rev-list -1 --parents $rev)
shift # discard the rev itself
echo there are $# parents and they are $*
for parent do
if [ $parent = $target ]; then
echo $rev has $target as a parent
fi
done

编辑:在大型仓库中,您可以使用 git branch --contains 获得更好的起点(如 RainerBlome in "referencing the child of a commit" 所述。请注意,您需要解析表示当前分支的 *,如果您将 HEAD“分离”,则“当前分支”为“无分支”,您可能需要添加 HEAD作为起点。然后,git rev-list --parents | grep ... 是找到所需引用的快速方法。我已经使用这些建议来提高性能等。

这是一个完整的脚本,也有一些错误检查;轻微测试。

#! /bin/sh
#
# git-rev-list-children.sh

find_branches()
{
local target="$1"

set -- $(git branch --contains $target |
sed -e 's/^\* (.*)/HEAD/' -e 's/^[* ] //')
case $# in
0) echo "there are no branches containing $revname"; return 1;;
esac
echo $@
}

find_children()
{
local target="$1"
shift

git rev-list --parents "$@" ^$target | grep " $target" |
while read line; do
set -- $line
echo $1
done
}

# add option parsing (--short?) here if desired
case $# in
0) echo "usage: git-rev-list-children <rev> ..." >&2; exit 1;;
esac

for revname do
target=$(git rev-parse "$revname") || exit 1
set -- $(find_branches "$revname" || exit 1)
find_children "$target" "$@"
done

关于git - 是否有任何特定语法来引用前向提交(不使用它的 SHA1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com