git branch -r 表示对象名称无效,因为该分支名称不是't in Git'的本地分支列表 . 使用以下命令从源更新本地分支列表:
git remote update
然后尝试再次检查您的远程分支 .
这对我有用 .
我相信 git fetch 拉入所有远程分支,这不是原始海报想要的 .
24
git remote show <origin name> 命令将列出所有分支(包括未跟踪的分支) . 然后,您可以找到需要获取的远程分支名称 .
例:
$ git remote show origin
使用以下步骤获取远程分支:
git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)
26 回答
你可以试试
要么
对于上面提到的所有建议,我都被困在了一个看到
error: pathspec 'desired-branch' did not match any file(s) known to git.
的情况 . 我正在使用git版本1.8.3.1 .所以 worked for me :
背后的解释是我注意到在获取远程分支时,它被取出到FETCH_HEAD:
Sidenote: 使用现代Git(> = 1.6.6),您可以使用
(注意它是'test'而不是'origin/test')执行神奇的DWIM -mery并为你创建本地分支'test',其上游将是远程跟踪分支'origin/test' .
git branch
输出中的* (no branch)
意味着您处于未命名的分支,即所谓的"detached HEAD"状态(HEAD直接指向提交,而不是对某些本地分支的符号引用) . 如果您在此未命名分支上进行了一些提交,则始终可以创建当前分支关闭当前提交:使用:
在我的良性案例中,其他答案不适用于现代Git . 如果远程分支是新的,您可能需要先拉,但我没有检查过这种情况 .
首先,你需要做:
git fetch
#如果你不知道分支名称其次,您可以通过以下方式检查远程分支到您的本地:
-b
将从您选择的远程分支创建指定名称的新分支 .如果分支是在
origin
遥控器以外的其他地方我喜欢做以下事情:这将检查
upstream
remote上的next
分支到名为second/next
的本地分支 . 这意味着如果您已经有一个名为next的本地分支,它将不会发生冲突 .OK ,答案很简单......你基本上看到了分支,但你还没有本地副本!...
你需要
fetch
分支......您可以简单地获取然后结帐到分支,使用下面的一行命令来执行此操作:
我还创建了下面的图像供您分享差异,看看
fetch
如何工作以及它与pull
的不同之处:获取原点并签出分支 .
To get newly created branches
To switch into another branch
您可以使用以下Bash脚本开始跟踪所有远程分支:
这也是一个单行版本:
更新
Jakub's answer实际上改善了这一点 . 如果Git版本≥1.6.6,只有一个遥控器,你可以这样做:
正如用户masukomi在评论中指出的那样,如果你有多个遥控器,
git checkout test
将不适用于现代git . 在这种情况下使用旧答案
在开始在远程分支上本地工作之前,您需要在下面的答案中调用它 .
要获取分支,您只需:
这将为您获取所有远程分支 . 您可以通过以下方式查看可用于结帐的分支机构:
有了远程分支机构,您现在需要查看您感兴趣的分支机构,为您提供本地工作副本:
命令
等于
然后
两者都将从
development
创建latest fixes_for_dev
接受的答案不适合你?
虽然第一个和选定的答案在技术上是正确的,但_207268会收到以下错误:
解决方案
如果收到此消息,则必须首先执行
git fetch origin
,其中origin
是运行git checkout remote_branch
之前的远程存储库的名称 . 以下是响应的完整示例:如您所见,运行
git fetch origin
检索了我们尚未设置为在本地计算机上跟踪的任何远程分支 . 从那里开始,由于我们现在有一个参考远程分支,我们可以简单地运行git checkout remote_branch
,我们将获得远程跟踪的好处 .其他人和女孩给出了解决方案,但也许我可以告诉你为什么 .
Does nothing
不等于doesn't work
,所以我猜你在终端输入'git checkout test'并按回车键时,不会显示任何消息,也不会出现错误 . 我对吗?如果答案是'是',我可以告诉你原因 .
原因是工作树中有一个名为“test”的文件(或文件夹) .
解析
git checkout xxx
时Git最初在
xxx
上看起来是一个分支名称,但是没有任何名为test的分支 .然后Git认为
xxx
是一条路径,幸运的是(或不幸的是),有一个名为的文件测试 . 所以git checkout xxx
意味着放弃xxx
文件中的任何修改 .如果没有名为
xxx
的文件,那么Git将尝试根据某些规则创建xxx
. 如果remotes/origin/xxx
存在,则其中一个规则是创建名为xxx
的分支 .在这种情况下,您可能想要创建一个跟踪远程
test
分支的本地test
分支:在早期版本的
git
中,您需要一个明确的--track
选项,但是当您从远程分支分支时,这是默认选项 .只需使用远程分支的名称运行
git checkout
即可 . Git将automatically create跟踪远程分支的本地分支:但是,如果在多个远程中找到该分支名称,则无法使用,因为Git不知道使用哪个 . 在这种情况下,您可以使用:
要么
在2.19中,Git学习了checkout.defaultRemote配置,它在解决这种歧义时指定了默认的远程 .
这些答案都不适合我 . 这工作:
git checkout -b feature/branch remotes/origin/feature/branch
如果远程分支名称以特殊字符开头,则需要在checkout命令中使用单引号,否则git将不知道您正在讨论哪个分支 .
例如,我试图检出一个名为
#9773
的远程分支,但命令无法正常工作,如下图所示:出于某种原因,我想知道尖锐符号(#)是否与它有关,然后我尝试用单引号包围分支名称,比如
'#9773'
rathen而不仅仅是#9773
,它运行正常 .请按照命令创建一个空文件夹 . 输入并使用此命令:
我使用以下命令:
git fetch && git checkout your-branch-name
我尝试了上面的解决方案,但它没有用 . 试试这个,它有效:
这将获取远程分支并创建一个名为
local_branch_name
的新本地分支(如果尚不存在)并跟踪其中的远程分支 .git branch -r
表示对象名称无效,因为该分支名称不是't in Git'的本地分支列表 . 使用以下命令从源更新本地分支列表:然后尝试再次检查您的远程分支 .
这对我有用 .
我相信
git fetch
拉入所有远程分支,这不是原始海报想要的 .git remote show <origin name>
命令将列出所有分支(包括未跟踪的分支) . 然后,您可以找到需要获取的远程分支名称 .例:
使用以下步骤获取远程分支:
例:
要克隆Git存储库,请执行以下操作:
上面的命令检出所有分支,但只会初始化
master
分支 . 如果要结帐其他分支机构,请执行以下操作:此命令检出远程分支,您的本地分支名称将与远程分支相同 .
如果要在结帐时覆盖本地分支名称:
现在您的本地分支名称是
enhancement
,但您的远程分支名称是future_branch
.Documentation
对于未命名的远程源(documentation),这将是DWIM:
要添加新遥控器,您需要先执行以下操作:
第一个告诉Git远程存在,第二个获取提交 .