如何签出远程Git分支?

这篇博客讨论了在Git中签出远程分支时遇到的问题及解决方案。当尝试使用`git checkout branch_name`签出远程分支时,可能会遇到无分支状态。解决方法包括使用`git fetch`获取远程分支,然后使用`git checkout -b local_branch_name origin/remote_branch_name`创建并签出本地分支。此外,还提供了其他命令变体和注意事项,如处理远程分支名包含特殊字符的情况。
摘要由CSDN通过智能技术生成

有人用git push origin test将一个名为test的分支git push origin test送到共享存储库。 我可以看到git branch -r

现在,我正在尝试签出远程test分支。

我试过了:

  • git checkout test ,什么都不做

  • git checkout origin/test给出* (no branch) 。 这令人困惑。 我怎么会处于“无分支”状态?

如何签出远程Git分支?


#1楼

这将对未命名的远程DWIM文档 ):

$ git checkout -t remote_name/remote_branch

要添加新的遥控器,您首先需要执行以下操作:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

第一个告诉Git远程存在,第二个告诉提交。


#2楼

接受的答案对您不起作用?

尽管第一个选择的答案在技术上是正确的 ,但有可能您尚未从远程存储库中检索所有对象和引用。 如果是这种情况,您将收到以下错误:

$ git checkout -b remote_branch origin/remote_branch

致命:git checkout:更新路径与切换分支不兼容。
您是否打算签出无法解决为提交的“ origin / remote_branch”?

如果收到此消息,则必须先执行git fetch origin ,其中origin是远程存储库的名称,然后再运行git checkout remote_branch 。 这是带有响应的完整示例:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

如您所见,运行git fetch origin检索我们尚未设置要在本地计算机上跟踪的任何远程分支。 从那里开始,由于我们现在有了对远程分支的引用,因此我们只需运行git checkout remote_branch即可获得远程跟踪的好处。


#3楼

要克隆Git存储库,请执行以下操作:

git clone <either ssh url /http url>

上面的命令签出所有分支,但是只有master分支会被初始化。 如果要结帐其他分支,请执行以下操作:

git checkout -t origin/future_branch (for example)

此命令检出远程分支,您的本地分支名称将与远程分支相同。

如果要在结帐时覆盖本地分支机构名称,请执行以下操作:

git checkout -t -b enhancement origin/future_branch

现在你的本地分支的名字是enhancement的,但你的远程分支的名字是future_branch

文献资料


#4楼

如果分支不在origin远程站点上,则我要执行以下操作:

$ git fetch
$ git checkout -b second/next upstream/next

这会将签出upstream远程站点上的next分支签入名为second/next的本地分支。 这意味着,如果您已经有一个名为next的本地分支,则不会发生冲突。

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next

#5楼

git branch -r表示对象名称无效,因为该分支名称不在Git的本地分支列表中。 使用以下命令从来源更新本地分支列表:

git remote update

然后尝试再次签出您的远程分支。

这对我有用。

我相信git fetch拉入所有远程分支,这不是原始发布者想要的。


#6楼

更新资料

雅库布的答案实际上对此有所改善。 使用≥1.6.6的Git版本,并且只有一个遥控器,您可以执行以下操作:

git fetch
git checkout test

正如用户masukomi在评论中指出的那样,如果您有多个遥控器,则git checkout test在现代git中将不起作用。 在这种情况下使用

git checkout -b test <name of remote>/test

或速记

git checkout -t <name of remote>/test

旧答案

在开始在远程分支上进行本地工作之前,您需要按照下面的答案中的说明获取它。

要获取分支,您只需要:

git fetch origin

这将为您获取所有远程分支。 您可以通过以下方式查看可用于结帐的分支:

git branch -v -a

有了远程分支之后,您现在需要检出您感兴趣的分支,并为您提供本地工作副本:

git checkout -b test origin/test

#7楼

在这种情况下,你可能需要创建一个本地test分支,它是跟踪远程test分支:

$ git branch test origin/test

git早期版本中,您需要一个显式的--track选项,但这是从远程分支分支时的默认选项。


#8楼

旁注:使用现代Git(> = 1.6.6 ),您可以仅使用

git checkout test

(请注意,执行神奇的DWIM -mery并为您创建本地分支“ test”是“测试”而非“起源/测试”),上游将是远程跟踪分支“起源/测试”。


git branch输出中的* (no branch)表示您处于未命名分支,处于所谓的“分离的HEAD”状态(HEAD指向直接提交,而不是对某些本地分支的符号引用)。 如果您在此未命名分支上进行了一些提交,则始终可以从当前提交创建本地分支:

git checkout -b test HEAD

#9楼

我尝试了上述解决方案,但是没有用。 试试这个,它的工作原理:

git fetch origin 'remote_branch':'local_branch_name'

这将获取远程分支并创建一个名为local_branch_name的新本地分支(如果尚不存在),并在其中跟踪远程分支。


#10楼

你可以试试

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

要么

git fetch
git checkout -b local_branch_name origin/branch_name

#11楼

git fetch && git checkout your-branch-name


#12楼

请按照命令创建一个空文件夹。 输入并使用以下命令:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'

#13楼

采用:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

在我的良性案例中,其他答案不适用于现代Git。 如果远程分支是新的,则可能需要先拉,但是我没有检查这种情况。


#14楼

指令

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

等于

 git fetch --all

接着

 git checkout -b fixes_for_dev origin/development

两者都会从development创建latest fixes_for_dev


#15楼

首先,您需要执行以下操作:

git fetch #如果您不知道分支名称

git fetch origin branch_name

其次,您可以通过以下方式将远程分支签出到本地:

git checkout -b branch_name origin/branch_name

-b将在您选择的远程分支中以指定名称创建新分支。


#16楼

其他人和女同性恋者提供了解决方案,但也许我可以告诉你原因。

git checkout测试,什么都不做

Does nothingdoesn't work ,所以我猜您在终端中输入“ git checkout test”并按回车键时,没有消息出现,也没有错误发生。 我对吗?

如果答案为“是”,我可以告诉您原因。

原因是您的工作树中有一个名为“ test”的文件(或文件夹)。

git checkout xxx解析时,

  1. Git首先在xxx上将其作为分支名称,但没有任何名为test的分支。
  2. 然后,Git认为xxx是路径,幸运的是(或不幸的是)有一个名为test的文件。 所以git checkout xxx意味着放弃对xxx文件的任何修改。
  3. 如果也没有名为xxx文件,则Git将尝试根据一些规则创建xxx 。 规则之一是如果存在remotes/origin/xxx则创建一个名为xxx的分支。

#17楼

您可以使用以下Bash脚本开始跟踪所有远程分支:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

这也是单行版本:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

#18楼

好的 ,答案很简单...您基本上可以看到分支,但是您还没有本地副本!...

您需要fetch分支...

您可以简单地提取然后签出到分支,使用下面的一行命令来执行该操作:

git fetch && git checkout test

我还创建了下面的图像供您共享差异,看一下fetch工作原理以及pull的不同之处:

git获取


#19楼

我使用以下命令:

git checkout --track origin/other_remote_branch

#20楼

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)

例:

$ git fetch origin test:test
$ git checkout test

#21楼

获取新创建的分支

git fetch

切换到另一个分支

git checkout BranchName

#22楼

从远程获取并检出分支。

git fetch <remote_name> && git checkout <branch_name> 

例如:

git fetch origin && git checkout feature / XYZ-1234-Add-alerts


#23楼

这些答案都不适合我。 这工作:

git checkout -b feature/branch remotes/origin/feature/branch


#24楼

只需使用远程分支的名称运行git checkout 。 Git将自动创建一个本地分支来跟踪远程分支:

git fetch
git checkout test

但是,如果在多个远程中都找到了该分支名称,则该名称将不起作用,因为Git不知道使用哪个名称。 在这种情况下,您可以使用以下任一方法:

git checkout --track origin/test

要么

git checkout -b test origin/test

2.19中 ,Git学习了checkout.defaultRemote配置,该配置指定了解决这种歧义时默认使用的远程。


#25楼

我陷入了看到error: pathspec 'desired-branch' did not match any file(s) known to git.的情况error: pathspec 'desired-branch' did not match any file(s) known to git. 以上所有建议。 我正在使用git版本1.8.3.1。

所以这对我有用

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

后面的解释是,我注意到在获取远程分支时,它已被获取到FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

#26楼

如果远程分支名称以特殊字符开头,则需要在checkout命令中用单引号引起来,否则git将不知道您在谈论哪个分支。

例如,我尝试签#9773#9773的远程分支,但是该命令无法正常工作,如下图所示:

在此处输入图片说明

出于某种原因,我想知道尖锐的符号(#)是否与它有关,然后我尝试将分支名称用单引号引起来,例如'#9773' 9773'rathen而不是仅#9773 ,并且效果很好。

$ git checkout -b '#9773' origin/'#9773'

#27楼

使用fetch来拉动所有遥控器

   git fetch --all

列出远程分支机构:

   git branch -r

列出所有分支机构

   git branch -l
   >>outpots like-
     * develop
       test
       master

结帐/更改分支

   git checkout master

#28楼

对于我们来说,似乎remote.origin.fetch配置出现了问题。 因此,除了master之外,我们看不到其他任何远程分支,因此git fetch [--all]没有帮助。 git checkout mybranchgit checkout -b mybranch --track origin/mybranch没有用,尽管它肯定在远程。

先前的配置只允许获取master

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

通过使用*修复,并从来源获取新信息:

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

$ git fetch
...
 * [new branch] ...
...

现在我们可以在本地git checkout远程分支了。

不知道此配置如何在我们的本地存储库中结束。


#29楼

要获取所有远程分支,请使用以下命令:

git fetch --all

然后结帐到分支:

git checkout test

#30楼

有很多选择,例如:

  • 选择1:

     git fetch && git checkout test 

    这是最简单的方法。

  • 选择2:

     git fetch git checkout test 

    一样,只是在两个陡峭的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值