Git 为什么它不是提交,并且不能从中创建分支?
我需要使用复杂的存储库配置。我有5个:Git 为什么它不是提交,并且不能从中创建分支?,git,git-non-bare-repository,Git,Git Non Bare Repository,我需要使用复杂的存储库配置。我有5个: 计算机1上的远程中央存储库 我的笔记本上的本地存储库(机器2) 机器3上的裸存储库 机器3上的存储库 机器4上的存储库,我们在其中进行代码审查 因此,我的理解是,它是这样工作的: 在我的笔记本电脑(机器2)上,我从位于机器1上的中央存储库进行克隆/提取 我将本地回购推送到机器3(使用裸存储库作为“中间层”) 现在我在机器3上做了一些更改,我想把这些更改推到机器4上。以下是我需要遵循的说明: 在机器3上,完成测试分支中的所有工作,提交 推送到机器3上的裸回购
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
已添加
当我执行
git rev-parse machine3/test-branch
在我的笔记本电脑(机器2)上,我得到:
machine3/测试分支
致命:参数“machine3/test branch”不明确:未知修订或路径不在工作树中。
使用“---”将路径与修订分开,如下所示:
'吉特[…]-[…]'
这个问题很复杂,答案很简单。别名和机器3之间不匹配。已使用的远程设备的别名不适用于machine3。机器3有另一个别名 对于那些在搜索致命问题的答案时发现此问题的人:“源/远程分支名称”不是提交,并且无法从中创建分支“本地分支名称”,您可能还需要先尝试以下操作:
git fetch --all
如果运行git checkout-b本地分支名称来源/远程分支名称
,而不先运行fetch
ing,则可能会遇到该错误
它之所以说“不是提交”,而不是像“分支不存在”这样更清楚的说法,是因为git在您指定的origin/remote branch name
处接受参数,并尝试将其解析为提交散列。这里也可以使用标记名和提交哈希作为参数。如果失败,则会产生相同的错误。如果git无法解析您提供给特定提交的分支,通常是因为它没有最新的远程分支列表git-fetch——所有这些都修复了这种情况
如果您有多个遥控器(例如,原点
,构建服务器
,joespc
,等等),则会包含--all
标志,因为git fetch
本身默认为您的第一个遥控器--通常是原点
。您还可以对特定的远程设备运行fetch
;e、 例如,git fetch buildserver
将只从buildserver
远程获取所有分支
要列出所有遥控器,请运行命令git remote-v
。如果在结果中只看到一个远程名称(例如,原点
),则可以省略-git fetch中的--all
标志。如果要从标记签出分支(如git checkout-b XXXX v0.1.1
),可以先尝试git fetch--tags
。我用这个设置解决了这个问题,只需使用此命令更新配置
git config-e——全局
并添加此配置
[remote "origin"]
url = https://git.example.com/example.git (you can omit this URL)
fetch = +refs/heads/*:refs/remotes/origin/*
然后您可以git fetch--all
我在visual studio代码中使用了git工作流,如下图所示解决了我的问题:
来自的解决方案包括git fetch--all
从VSCode 1.53(2021年1月)开始,您将拥有(和):
将autofetch
更改为具有“current
”、“all
”和“off
”的字符串配置
这允许用户从所有远程设备获取数据,而不仅仅是他们的源设备
对于使用Fork的开发人员来说,这应该会使扩展更直观地工作
因此,如果您将VSCode设置git.autofetch
设置为“all
”,您甚至不必为此问题键入git fetch--all
:
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
对我来说,我应该先签出到测试分支
,然后它工作正常,并从测试分支
创建了一个新分支。我们遇到了以下错误:
fatal: 'origin/newbranch' is not a commit and a branch 'newbranch' cannot be created from it
因为我们做了一个简约的克隆,使用:
git clone --depth 1 --branch 'oldbranch' --single-branch 'git@github.com:user/repo.git'
对我们来说,最简单的解决方案是:
git remote set-branches --add 'origin' 'newbranch'
git fetch 'origin'
git checkout --track 'origin/newbranch'
假设远程称为“origin”,远程分支称为“newbranch”。机器3的repo是空的,这意味着它没有任何工作树git checkout-b test branch machine-3/test branch
需要一个工作树,因此失败。此外,您需要检查机器3/测试分支是否存在。在机器3上,我有2个回购(一个是裸回购,另一个是非裸回购)。我在机器3上的非裸回购中有“测试分支”。很抱歉,我错过了它。什么是git rev parse machine3/test branch
echo?在运行步骤4的repo中。让我们来看看。对我来说git fetch origin
git fetch origin master
没有帮助,我必须git获取origin refs/heads/master:refs/remotes/origin/master
@SillyFreak这是唯一对我有效的方法。@SillyFreak-我无法为上游创建跟踪分支,但它在:git获取上游refs/heads/master:refs/remotes/upstream/My Remote branch name之后开始工作这对我有效!谢谢你也为我工作。我已经移除了我唯一的遥控器,一次清除了所有的追踪分支,那条线就不见了。
git remote set-branches --add 'origin' 'newbranch'
git fetch 'origin'
git checkout --track 'origin/newbranch'