file git add -A git -6ren">
gpt4 book ai didi

git rev-parse --verify 说 "fatal: Needed a single revision"

转载 作者:太空狗 更新时间:2023-10-29 13:00:28 34 4
gpt4 key购买 nike

考虑这个测试脚本。

#!/bin/sh -x

rm -rf origin clone
git init origin
cd origin
echo foo > file
git add -A
git commit -m "initial commit"
git branch foo

cd ..
git clone origin clone
cd clone
git rev-parse --verify foo

我们创建一个 origin 仓库,创建一个名为 foo 的分支,克隆该仓库,并在克隆中尝试验证名称 foogit rev-parse --verify foo 的有效对象。

但是当我运行它时,它说,“fatal: Needed a single revision”,这对我来说没有任何意义。

我猜它是想告诉我 foo 不是分支名称,只有 origin/foo 存在?但是当我 git checkout foo 时它显然有效。

总的来说,我想做的是提前验证 git checkout foo 是否有效,而不是实际运行 git checkout foo。我该怎么做?

最佳答案

你是对的:分支foo克隆中不存在。

克隆过程通常会复制所有分支——更准确地说,是 refs/heads/* 形式的引用— 远程跟踪分支,形式为 refs/remotes/<remote>/* 的引用. ( Remote 的名称是您使用 -o 指定的名称,如果您未指定任何名称,则为 origin。)

克隆完成后,git clonegit checkout您用 -b 指定的分支.如果您不指定某些内容,它会使用它可以看到的 HEAD决定要做什么git checkout ;大多数情况下,它最终会做 git checkout master .

最后一个git checkout master实际创建本地分支的步骤 master ,由于来自 git checkout 的这一点文档:

If branch is not found but there does exist a tracking branch in exactly one remote (call it remote) with a matching name, treat as equivalent to
$ git checkout -b <em>branch</em> --track <em>remote</em>/<em>branch</em>

所以如果你确定你刚刚 git clone d 这样只有一个 Remote ,你知道 Remote 的名称是 origin , 你可以简单地做一个 git rev-parse --verify origin/foo查明该远程跟踪分支是否存在。 (根据需要为不同名称的 Remote 进行修改;和/或使用 git remote 获取所有可能的 Remote 列表,然后遍历所有 Remote 以查明是否恰好有一个名为 foo 的分支,如果需要的话。)

如果某个 Remote 的值奇怪 fetch =,我不确定这个过程是否完全万无一失行,例如,如果远程 origin提取到名为 refs/remotes/weird/master 的远程跟踪分支而不是 refs/remotes/origin/master , 有可能 git checkout这个没问题,但是如果你检查origin/master你不会找到它。 (另一方面,奇怪的 fetch = 行会混淆 git 的其他部分,包括我今天早上在 git pull 中查看的一些代码。)

关于git rev-parse --verify 说 "fatal: Needed a single revision",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28355697/

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