有人将名为test
的{{1}}分支推送到共享存储库。我可以看到git push origin test
的分支。
现在我正在尝试检查远程git branch -r
分支。
我试过了:
test
什么都不做
git checkout test
提供git checkout origin/test
。这令人困惑。我怎么能在“没有分支”?
如何查看远程Git分支?
答案 0 :(得分:8459)
Jakub's answer实际上改善了这一点。如果Git版本≥1.6.6,只有一个遥控器,你可以这样做:
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
答案 1 :(得分:1194)
旁注: 借助现代Git(&gt; = 1.6.6),您只需使用
git checkout test
(请注意,'test'而不是'origin / test')执行神奇的DWIM - mery并为您创建本地分支'test',其上游将是远程跟踪分支'origin /测试”。
* (no branch)
输出中的git branch
表示您在未命名的分支上,处于所谓的“分离的HEAD”状态(HEAD直接指向提交,而不是对某些本地分支的符号引用)。如果您在此未命名分支上进行了一些提交,则始终可以创建本地分支关闭当前提交:
git checkout -b test HEAD
答案 2 :(得分:529)
在这种情况下,您可能想要创建一个跟踪远程test
分支的本地test
分支:
$ git branch test origin/test
在早期版本的git
中,您需要一个明确的--track
选项,但是当您从远程分支分支时,这是默认选项。
答案 3 :(得分:442)
虽然第一个和选定的答案在技术上是正确的,但您可能还没有从远程存储库中检索所有对象和引用。如果是这种情况,您将收到以下错误:
$ 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
,我们将获得远程跟踪的好处。
答案 4 :(得分:228)
我尝试了上述解决方案,但它没有用。试试这个,它有效:
git fetch origin 'remote_branch':'local_branch_name'
这将获取远程分支并创建一个名为local_branch_name
的新本地分支(如果不存在)并跟踪其中的远程分支。
答案 5 :(得分:105)
对于未命名的远程源(DWIM),这将documentation:
$ git checkout -t remote_name/remote_branch
要添加新遥控器,您需要先执行以下操作:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
第一个告诉Git远程存在,第二个告知提交。
答案 6 :(得分:100)
使用:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
在我的良性案例中,其他答案不适用于现代Git。如果远程分支是新的,你可能需要先拉,但我还没有检查过这种情况。
答案 7 :(得分:79)
好的,答案很简单......你基本上看到了分支,但你还没有本地副本!...
你需要fetch
分支......
您可以简单地获取然后结帐到分支,使用下面的一行命令来执行此操作:
git fetch && git checkout test
我还创建了下面的图片,供您分享差异,查看fetch
的工作原理以及它与pull
的区别:
答案 8 :(得分:52)
要克隆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
。
答案 9 :(得分:34)
你可以尝试
git fetch remote
git checkout --track -b local_branch_name origin/branch_name
或
git fetch
git checkout -b local_branch_name origin/branch_name
答案 10 :(得分:28)
首先,您需要:
git fetch
#如果您不知道分支名称
git fetch origin branch_name
其次,您可以通过以下方式检查远程分支到您的本地:
git checkout -b branch_name origin/branch_name
-b
将从您选择的远程分支创建指定名称的新分支。
答案 11 :(得分:27)
命令
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
两者都会从latest fixes_for_dev
development
答案 12 :(得分:25)
我使用以下命令:
git checkout --track origin/other_remote_branch
答案 13 :(得分:23)
如果分支位于origin
遥控器以外的其他位置,我喜欢执行以下操作:
$ git fetch
$ git checkout -b second/next upstream/next
这将检出next
远程上的upstream
分支到名为second/next
的本地分支。这意味着如果您已经有一个名为next的本地分支,则不会发生冲突。
$ git branch -a
* second/next
remotes/origin/next
remotes/upstream/next
答案 14 :(得分:16)
git branch -r
表示对象名称无效,因为该分支名称不在Git的本地分支列表中。使用以下命令从源更新本地分支列表:
git remote update
然后尝试再次检查远程分支。
这对我有用。
我相信git fetch
会拉入所有远程分支,这不是原始海报所需要的。
答案 15 :(得分:16)
git checkout -b feature/branch remotes/origin/feature/branch
答案 16 :(得分:15)
git fetch && git checkout your-branch-name
答案 17 :(得分:13)
我被困在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
答案 18 :(得分:13)
仅使用远程分支的名称运行git checkout
。 Git将automatically create跟踪远程分支的本地分支:
git fetch
git checkout test
但是,如果在多个远程站点中都找到了该分支名称,那么它将无法正常工作,因为Git不知道使用哪个分支。在这种情况下,您可以使用以下任一方法:
git checkout --track origin/test
或
git checkout -b test origin/test
在2.19中,Git学习了checkout.defaultRemote
的配置,该配置指定了解决这种歧义时默认使用的遥控器。
答案 19 :(得分:10)
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
答案 20 :(得分:8)
其他人和女孩给出解决方案,但也许我可以告诉你原因。
git checkout test什么都不做
Does nothing
不等于doesn't work
,所以我想当你输入&#39; git checkout test&#39;在您的终端并按回车键,不会显示任何消息,也不会发生错误。我是对的吗?
如果答案是“是”,我可以告诉你原因。
原因是有一个名为&#39; test&#39;的文件(或文件夹)。在你的工作树中。
解析git checkout xxx
时,
xxx
视为分支名称,但没有任何名为test的分支。xxx
是一条路径,幸运的是(或者不幸的是),有一个名为test的文件。因此git checkout xxx
表示放弃xxx
文件中的任何修改。xxx
的文件,那么Git将尝试根据某些规则创建xxx
。其中一条规则是,如果存在xxx
,则创建一个名为remotes/origin/xxx
的分支。答案 21 :(得分:7)
获取新创建的分支
git fetch
切换到另一个分支
git checkout BranchName
答案 22 :(得分:6)
从遥控器中取出并结帐分支。
git fetch <remote_name> && git checkout <branch_name>
E.g:
git fetch origin&amp;&amp; git checkout功能/ XYZ-1234-Add-alerts
答案 23 :(得分:6)
您可以使用以下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 ;
答案 24 :(得分:2)
只需运行这两个命令,您应该会很好。
git checkout <branch-name>
git pull origin <branch-name>
答案 25 :(得分:2)
我用了那个:
git fetch origin
git reset --hard origin/{branchname}
答案 26 :(得分:1)
请按照命令创建一个空文件夹。输入并使用以下命令:
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'
答案 27 :(得分:1)
如果远程分支名称以特殊字符开头,则需要在checkout命令中用单引号引起来,否则git将不知道您在谈论哪个分支。
例如,我尝试签出名为#9773
的远程分支,但是该命令无法正常工作,如下图所示:
出于某种原因,我想知道尖号(#)是否与它有关,然后我尝试将分支名称用单引号引起来,例如'#9773'
相对于#9773
而且效果很好。
$ git checkout -b '#9773' origin/'#9773'
答案 28 :(得分:1)
要获取所有远程分支,请使用
:git fetch --all
然后结帐至分支:
git checkout test
答案 29 :(得分:1)
有很多选择,例如:
替代1:
git fetch && git checkout test
这是最简单的方法。
替代2:
git fetch
git checkout test
是一样的,只是在两个陡峭处。
答案 30 :(得分:1)
答案 31 :(得分:1)
您可以在本地添加新分支test
,然后使用:
git branch --set-upstream-to=origin/test test
答案 32 :(得分:1)
git fetch --all
会将所有远程分支提取到本地
git checkout test
将您切换到测试分支
答案 33 :(得分:0)
使用fetch
拉动所有遥控器
git fetch
要列出所有分支机构
git branch -l
>>outpots like-
* develop
test
master
结帐/更改分支
git checkout master
答案 34 :(得分:0)
对于我们来说,似乎remote.origin.fetch
配置带来了问题。因此,除了master
之外,我们看不到其他任何远程分支,因此git fetch [--all]
没有帮助。 git checkout mybranch
和git 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
在本地进行远程分支了。
不知道此配置如何在我们的本地存储库中结束。