如何添加,获取和签出丢失的远程分支?

时间:2014-05-21 09:37:21

标签: git

我用--single-branch选项克隆了我的仓库:

git clone -b FIRST git@<host>:repos/repo.git --single-branch

现在,正如预期的那样,我只配置了这个单一上游。因此,以下命令将不起作用:

git branch --track SECOND origin/SECOND

如何添加,获取和签出另一个现有的远程存储库?

1 个答案:

答案 0 :(得分:3)

由于您使用--single-branch选项克隆了存储库,因此将其设置为仅跟踪遥控器上的此分支。

TL; DR :完全撤消--single-branch,撤消其配置设置并重新提取

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch

在使用--single-branch设置的仓库中,从远程设置到fetch另一个分支,您必须明确地获取它。

git fetch origin +refs/heads/<branch-name>:refs/remotes/origin/<branch-name>

或者,您可以将<branch-name>替换为*来获取所有远程分支。

现在你应该能够检查新获取的分支。

git checkout <branch-name>

说明

我使用的提取语法大致可以描述为source:target 使用它时,您将使用第一条路径描述获取的source,同时确定具有第二条路径的target

这意味着您从refs/heads/<branch>获取遥控器上的分支,并将结果写入refs/remotes/origin/<branch>。当然可以将它写在不同的地方,例如使用<branch>只是一个本地分支(也可以选择喜欢的名称)。

此外,这解释了为什么git push origin :<branch>删除了遥控器上的<branch>,因为您正在将 no 推送到远程分支,从而有效删除它。

注意撰写refs/heads/<branch> refs/heads/时完全是可选的,如果你只是说明<branch>,git会查看refs/heads/。这不仅对获取有效,而且对所有分支引用都有效。