如何查看远程Git分支?
有人用git push origin test
将一个名为test
的分支git push origin test
送到共享库。 我可以看到与git branch -r
。
现在我试图检查远程test
分支。
我试过了:
-
git checkout test
哪个没做 -
git checkout origin/test
给* (no branch)
。 这是令人困惑的。 我怎么能在“没有分支”?
如何查看远程Git分支?
更新
Jakub的回答实际上改善了这一点。 使用Git版本≥1.6.6时,您可以执行以下操作:
git fetch git checkout test
(用户masukomi指出,如果你有多个远程git checkout test
将不能在现代git中工作,在这种情况下使用git checkout -b test <name of remote>/test
)。
老答案
在远程分支上本地开始工作之前,您需要按照以下答案中的提示取出它。
要获取分支,您只需要:
git fetch origin
这将为您获取所有的远程分支。 您可以看到可用于结帐的分行:
git branch -v -a
在远程分支机构,你现在需要检查你感兴趣的分支,给你一个本地工作副本:
git checkout -b test origin/test
旁注:用现代的Git(> = 1.6.6 ),你可以使用
git checkout test
(注意,它是“testing”而不是“起源/testing”)来执行神奇的DWIM -mery并为您创build本地分支“testing”,上游将是远程跟踪分支的“起源/testing”。
git branch
输出中的* (no branch)
意味着你在一个未命名的分支上,在所谓的“detached HEAD”状态(HEAD直接指向提交,而不是对某个本地分支的符号引用)。 如果你在这个未命名的分支上做了一些提交,你总是可以创build本地分支closures当前提交:
git checkout -b test HEAD
在这种情况下,您可能需要创build一个本地test
分支,用于跟踪远程test
分支:
$ git branch test origin/test
在早期版本的git
,你需要一个明确的--track
选项,但是当你分支一个远程分支时,这是默认的。
接受的答案不适合你?
虽然第一个和所选的答案在技术上是正确的 ,但是您还没有从远程存储库中检索到所有对象和引用。 如果是这样,您将收到以下错误:
$ git checkout -b remote_branch origin/remote_branch
致命的:git checkout:更新path与切换分支不兼容。
您是否打算签出无法parsing为“提交”的“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
,我们将获得远程跟踪的好处。
我试过上面的解决scheme,但没有奏效。 试试这个,它的工作原理:
git fetch origin 'remote_branch':'local_branch_name'
这将获取远程分支,并创build一个名称为local_branch_name
的新本地分支(如果尚未存在),并跟踪远程分支。
这将DWIM的远程非命名来源( 文档 ):
$ git checkout -t remote_name/remote_branch
要添加新的远程,您需要首先执行以下操作:
$ git remote add remote_name location_of_remote $ git fetch remote_name
第一个告诉Git远程存在,第二个获取提交。
使用:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
其他答案不适用于我的良性情况下的现代Git。 如果远程分支是新的,你可能需要先拉,但是我没有检查过这种情况。
要克隆一个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
。
文档
你可以试试
git fetch remote git checkout --track -b local_branch_name origin/branch_name
要么
git fetch git checkout -b local_branch_name origin/branch_name
命令
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
创build一个latest fixes_for_dev
如果分支是在远程以外的东西,我喜欢做以下事情:
$ 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
首先,你需要做的是:
git fetch
#如果你不知道分支名称
git fetch origin branch_name
其次,您可以通过以下方式检查远程分支到您的本地:
git checkout -b branch_name origin/branch_name
-b
将从您select的远程分支中以指定名称创build新的分支。
git fetch && git checkout your-branch-name
git branch -r
说对象名称是无效的,因为该分支名称不在Git的本地分支列表中。 从原始更新您的本地分支名单:
git remote update
然后再次尝试检出您的远程分支。
这对我有效。
我相信git fetch
拉动所有的远程分支,这不是原来的海报想要的。
我使用以下命令:
git checkout --track origin/other_remote_branch
好的 ,答案很简单…你基本上看到这个分支,但是你没有一个本地副本…
你需要fetch
分行…
您可以简单地获取然后签出到分支,使用下面的一行命令来做到这一点:
git fetch && git checkout test
我也在下面为你创build了一个图像来分享它们之间的差异,看看如何fetch
工作,以及如何fetch
不同的结果:
请按照该命令创build一个空文件夹。 input并使用这个命令:
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'
另一个人给出的解决scheme,但也许我可以告诉你为什么。
git checkouttesting哪个没做
Does nothing
都不等于doesn't work
,所以我想当你在terminal上input“git checkout test”,按回车键,就不会出现消息,也不会出错。 我对吗?
如果答案是肯定的,我可以告诉你原因。
原因是工作树中有一个名为“test”的文件(或文件夹)。
当parsinggit checkout xxx
,
- git首先将
xxx
看作是一个brach名称,但是没有任何名为test的分支。 - 那么git认为
xxx
是一条path,幸运的是(或不幸),有一个名为test的文件。 所以git checkout xxx
表示丢弃xxx
文件中的任何修改 - 如果没有名为
xxx
文件,那么git会根据一些规则尝试创buildxxx
。 其中一个规则是创build一个名为xxx
的分支,如果remotes/origin/xxx
存在的话。
你可以开始跟踪所有的远程分支跟随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 ;